Ich habe folgendes Problem:
Ich versuche herauszufinden wie das Statische binden genau funktioniert. Meiner Meinung nach sollte 2 mal one als Ausgabe erscheinen allerdings bekomme ich mit Eclipse einmal two und einmal one als ausgabe.
Die Frage die ich mir seit 5 Stunden stelle ist, wieso two bei x.call(new Or()) raußkommt.
Mit x.call rufe ich ja
in x auf was von typ Either ist. Da aber mein übergebenes object new Or() in x.call(new Or()) mit if(this !=that) true raußkommt sollte ich ja mittels this.meth() dann die methode in dem Objekt in dem ich mich befinde bekommen. Wäre das aber dann nicht "one"?
Ich bin gerade am verzweifeln und würde mich über jeden Tipp freuen.
Java:
abstract class EitherOr {
public void call(EitherOr that) {
if (this != that) {
this.meth();
}
that.meth();
}
public abstract void meth();
}
class Either extends EitherOr {
public void meth() {
System.out.println("one");
}
}
class Or extends EitherOr {
public void meth() {
System.out.println("two");
}
}
public class Test {
public static void main(String[] args) {
Either x = new Either();
x.call(new Or());
x.call(x);
}
}
Ich versuche herauszufinden wie das Statische binden genau funktioniert. Meiner Meinung nach sollte 2 mal one als Ausgabe erscheinen allerdings bekomme ich mit Eclipse einmal two und einmal one als ausgabe.
Die Frage die ich mir seit 5 Stunden stelle ist, wieso two bei x.call(new Or()) raußkommt.
Mit x.call rufe ich ja
Java:
public void call(EitherOr that) {
if (this != that) {
this.meth();
}
that.meth();
}
Ich bin gerade am verzweifeln und würde mich über jeden Tipp freuen.