Stärkere Bindung oder Cast überflüssig?
-
Eine Frage, ich stehe etwas auf dem Schlauch.
Warum wird hier nur die Methode Start der Klasse TestB ausgeführt, warum wird hier der Cast sowas von überflüssig?
Ich hoffe die Frage kam nicht schon zum x-ten Male.
Danke, hier der Code:
package SCJPPackage; public class TestA { public void start() { System.out.println("TestA"); } }
package SCJPPackage; public class TestB extends TestA{ public void start() { System.out.println("TestB"); } public static void main(String[] args) { //TestA a = new TestA(); //a.start(); ((TestA)new TestB()).start(); } }
-
Der Cast verändert nicht das Objekt was du erstellt hat.
TestB b = new TestB(); System.out.println(b); TestA a = (TestA)b; // geht auch ohne expliziten cast System.out.println(a);
Die Ausgabe wird zwei mal die selbe Ausgabe bringen, da es dasselbe Objekt ist. Daher wird auch start() von TestB aufgerufen, obwohl es einer TestA Variablen zugewiesen ist.
-
warum wird hier der Cast sowas von überflüssig?
Weil TestB von TestA erbt, d.h. TestB ist ein TestA-Objekt, hat aber event. noch eigene Eigenschaften.
Desshalb ist auch die ZuweisungTestA a = b;
ohne cast möglich.
Mfg
Ravendark
-
Weil du in B die Methode implementiert hast, hast du die von A dort Überschrieben. Die Methode von A ist damit über B nicht mehr erreichbar, nur noch innerhalb von B.