Hallo nochmal Javafreunde,
ich habe folgendes Dilemma:
Also im Unterricht behandeln wir gerade in OOP Bindung und Abstraktion.
Und es gibt nun eine Aufgabe an der ich schon verzweifle. Wir sollen ein Programm schreiben, um zu testen warum bei gleichnahmigen Methoden bestimmte methoden aufgerufen werden. Das ist soweit kein Geheimnis. Die Signatur und wie speziell eine Methode ist. So weit so gut. Jetz habe ich ein Testprogramm, bei dem Java mir Teilweise andere Werte ausgibt, als ich sie mir vorher berechnet habe. Ich komme einfach nicht dahinter warum dies so ist.
folgendes programm:
also meinen eigenen Berechnungen zufolge kommt diese Ausgabe heraus:
1,2,5,5,2,4,5,3
java jedoch gibt mir das hier aus:
1,3,4,5,4,4,5 und eine ClassCastException
meine Frage ist ganz einfach, warum nimmt Java bei dem Aufruf 3 das print(B b) statt dem print(C c)? Analog mit den anderen Werten. Woran liegt das?Wo ist mein Denkfehler?
Danke schonmal im vorraus
Mfg Wurmi
ich habe folgendes Dilemma:
Also im Unterricht behandeln wir gerade in OOP Bindung und Abstraktion.
Und es gibt nun eine Aufgabe an der ich schon verzweifle. Wir sollen ein Programm schreiben, um zu testen warum bei gleichnahmigen Methoden bestimmte methoden aufgerufen werden. Das ist soweit kein Geheimnis. Die Signatur und wie speziell eine Methode ist. So weit so gut. Jetz habe ich ein Testprogramm, bei dem Java mir Teilweise andere Werte ausgibt, als ich sie mir vorher berechnet habe. Ich komme einfach nicht dahinter warum dies so ist.
folgendes programm:
Java:
public class Print1{
int x = 1;
public void print(A a){
System.out.println(x);
}
public void print(B b){
System.out.println(x+1);
}
}
Java:
public class Print2 extends Print1{
int x = 3;
public void print(A a){
System.out.println(x);
}
public void print(B b){
System.out.println(x+1);
}
public void print(C c){
System.out.println(x+2);
}
}
Java:
public class test2{
public static void main(String []args){
A a = new A();
B b = new B();
C c = new C();
Print1 p1 = new Print1();
Print2 p2 = new Print2();
p1=p2;
System.out.println(p1.x);//Aufruf 1
System.out.println(((Print2)p1).x);//Aufruf 2
p1.print(c); //Aufruf 3
((Print2)p1).print(c);//Aufruf 4
((Print1)p2).print(b);//Aufruf 5
((Print1)p2).print(c);//Aufruf 6
p2.print(c);//Aufruf 7
p1 = new Print1();
((Print2)p1).print(a);//Aufruf 8
}
}
class A{}
class B extends A{}
class C extends B{}
also meinen eigenen Berechnungen zufolge kommt diese Ausgabe heraus:
1,2,5,5,2,4,5,3
java jedoch gibt mir das hier aus:
1,3,4,5,4,4,5 und eine ClassCastException
meine Frage ist ganz einfach, warum nimmt Java bei dem Aufruf 3 das print(B b) statt dem print(C c)? Analog mit den anderen Werten. Woran liegt das?Wo ist mein Denkfehler?
Danke schonmal im vorraus
Mfg Wurmi