simpler code mit versteckten fallen!
-
hi leute, könnte mir bitte jemand kurz mal den code da unten erklären??
(jeder hat mal klein angefangen!class A { public void foo() { System.out.println("A"); } } class B extends A { public void foo() { System.out.println("B"); } } class C extends B { public void foo() { super.foo(); // was bewirkt dieses super.foo() hier eigentlich?? //lieg ich richtig in der annahme dass hier von der superklasse in dem fall class //b die funktion foo() aufgerufen wird?? System.out.println("C"); } } public class Test { public static void main(String [] args) { A a = new A(); B b = new B(); C c = new C(); B b1; A a1 = a; // b1 = (B)a1; hier funkt das kasten nicht! warum?? a1.foo(); //erstes "A" a1 = c; //ausgabe von "B" // c = b; //incompatible classen!! a1.foo(); //a1 = c! ausgabe "C" b1 = (B)a1; //weil hier funkt es aber! b1.foo(); } }
bitte danke!!
-
super.foo(); // was bewirkt dieses super.foo() hier eigentlich??
//lieg ich richtig in der annahme dass hier von der superklasse in dem fall class
//b die funktion foo() aufgerufen wird??Ja, richtig.
Zum Rest:Mach dir klar, dass in einer abgeleiteten Klasse mehr Informationen stehen.
b1 = (B)a1; hier funkt das kasten nicht! warum??
Hätte B einige Membervariablen die A nicht hat, können diese nicht gestezt werden.
b1 = (B)a1; //weil hier funkt es aber!
a1 ist jetzt ein C Objekt. In C stehen insbesondere alle Informationen
aus B, deshalb geht das.Jockel