[JAVA] Überladung, wenn Methodenargumente vererbt / implementiert werden

In Java wird beim Überschreiben einer Klasse mit einer Vererbungs- / Implementierungsbeziehung der Typ zur Laufzeit bestimmt und die Methode aufgerufen. Bei Überlastung habe ich jedoch versucht herauszufinden, welche Methode aufgerufen wird.

Schnittstelle

public interface OInterface {
	public void printClassname();
}

** Elternklasse **

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

** Untergeordnete Klasse (Implementierungsschnittstelle) **

public class OChild extends OParent implements OInterface {

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

** Ausführungscode **

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();
	}
}

** Prognose ** Vorhersage 1. Alle (1) bis (3) heißen overloadMethod (OChild child) (wie Override). Vorhersage 2. In (1) bis (3) wird die Methode des deklarierten Typs aufgerufen.

** Ausführungsergebnis **

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

Fazit

Vorhersage 2. In (1) bis (3) wird die Methode des deklarierten Typs aufgerufen. war Überladung wird beim Kompilieren entschieden, nicht wahr?

Recommended Posts

Überladung, wenn Methodenargumente vererbt / implementiert werden
Überladungsmethode mit Int- und Integer-Argumenten
Informationen zu den Zeichen, die im Argument der Methode vervollständigt werden
Hash in Ruby läuft über Stapel, wenn es viele Argumente gibt