Guten Tag,
hab ein Problem mit dem Statischen und Dynamischen Typ bei der Vererbung.
Hier mal ein Code Beispiel:
Nun soll man schauen was bei folgendem raus kommt:
Dachte eigentlich ich hätte es verstanden doch nichts habe ich!
1. Wieso muss a so gecastet werden ((B)a)? Der Statische Typ ist doch A und der Dynamische Typ ist B damit schaut er doch in der Variable a erst mal in der Classe von B nach oder etwa nicht? dort sollte er das Datenelement finden.
2. a.f(4.5) sollte er auch in der Classe von B nachschauen da das ja der Dynamsche Typ ist und die Methode dort gefunden wird.
3. B b = (B)a was passiert hier genau? Denn ich hätte gesagt das wäre equivalent zu B b = new B(2); also von oben A a = new B (2); ich presse den Dynamischen Typ B in den Statischen Typ B also B = B!!! scheint aber auch Falsch zu sein den eclipse zeigt mir dann auch Methoden von A an
4. Welche Funktion wird dann bei z = b.f(5) aufgerufen das sollte sich mit 3. erklären lassen
Die 4 Fragen hätte ich zu dieser Aufgabe denn ich verstehe jetzt nichts mehr
LG
hab ein Problem mit dem Statischen und Dynamischen Typ bei der Vererbung.
Hier mal ein Code Beispiel:
Code:
public class A{
public static int x=1;
public A() {
x+=3;
}
public int f(int y) {
return y+x;
}
public int f(double y) {
x=0;
return (int)y;
}
}
public class B extends A {
public int y=3;
public B(int x) {
super();
y+=x;
}
public int f(double x) {
y+=1;
return (int)x*y;
}
}
Nun soll man schauen was bei folgendem raus kommt:
Java:
A a = new B(2);
System.out.println(A.x+" "+((B)a).y);
int z=a.f(4.5);
System.out.println(((B)a).y+" "+z+" "+A.x);
B b = (B) a;
z = b.f(5);
System.out.println(b.y+" "+z+" "+A.x);
Dachte eigentlich ich hätte es verstanden doch nichts habe ich!
1. Wieso muss a so gecastet werden ((B)a)? Der Statische Typ ist doch A und der Dynamische Typ ist B damit schaut er doch in der Variable a erst mal in der Classe von B nach oder etwa nicht? dort sollte er das Datenelement finden.
2. a.f(4.5) sollte er auch in der Classe von B nachschauen da das ja der Dynamsche Typ ist und die Methode dort gefunden wird.
3. B b = (B)a was passiert hier genau? Denn ich hätte gesagt das wäre equivalent zu B b = new B(2); also von oben A a = new B (2); ich presse den Dynamischen Typ B in den Statischen Typ B also B = B!!! scheint aber auch Falsch zu sein den eclipse zeigt mir dann auch Methoden von A an
4. Welche Funktion wird dann bei z = b.f(5) aufgerufen das sollte sich mit 3. erklären lassen
Die 4 Fragen hätte ich zu dieser Aufgabe denn ich verstehe jetzt nichts mehr
LG