[JAVA] Surcharge lorsque les arguments de méthode sont hérités / implémentés

En Java, lors du remplacement d'une classe qui a une relation héritage / implémentation, le type est déterminé au moment de l'exécution et la méthode est appelée, mais en surcharge, j'ai essayé de savoir quelle méthode est appelée.

interface

public interface OInterface {
	public void printClassname();
}

** Classe des parents **

public class OParent  {
	public void printClassname() {
		System.out.println("called:OParent=>printClassname()");
	}
}

** Classe enfant (interface d'implémentation) **

public class OChild extends OParent implements OInterface {

	@Override
	public void printClassname() {
		System.out.println("called:OChild=>printClassname()");
	}
}

** Code d'exécution **

public class OverloadMain {
	public static void main(String[] args) {

		OverloadMain main = new OverloadMain();

		OChild child = new OChild();
		OParent parent = new OChild();
		OInterface iface = new OChild();

		main.overloadMethod(child);  // (1)
		System.out.println("----");
		main.overloadMethod(parent); // (2)
		System.out.println("----");
		main.overloadMethod(iface);  // (3)
	}


	public void overloadMethod(OChild child) {
		System.out.println("called:overloadMethod(OChild)");
		child.printClassname();
	}

	public void overloadMethod(OParent parent) {
		System.out.println("called:overloadMethod(OParent)");
		parent.printClassname();
	}

	public  void overloadMethod(OInterface iface) {
		System.out.println("called:overloadMethod(OInterface)");
		iface.printClassname();
	}
}

** Prévoir ** Prédiction 1. Tous (1) à (3) sont appelés overloadMethod (OChild child) (identique à override) Prédiction 2. Dans (1) à (3), la méthode du type déclaré est appelée.

** Résultat d'exécution **

called:overloadMethod(OChild)
called:OChild=>printClassname()
----
called:overloadMethod(OParent)
called:OChild=>printClassname()
----
called:overloadMethod(OInterface)
called:OChild=>printClassname()

Conclusion

Prédiction 2. Dans (1) à (3), la méthode du type déclaré est appelée. était La surcharge est décidée au moment de la compilation, n'est-ce pas?

Recommended Posts

Surcharge lorsque les arguments de méthode sont hérités / implémentés
Méthode de surcharge avec arguments Int et Integer
A propos des caractères qui sont complétés dans l'argument de la méthode
Ruby Hash déborde de pile lorsqu'il y a de nombreux arguments