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); }
}
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); }
}
// a tester class with main method
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); // Call 1, p1 is from Type Print1
p1.print(c); /* Call 2
//p1 is from Type Print2, print(B b) will be called */`
Класс B является подклассом класса A и C является подклассом В.в Java (методы доминирующих и "полей")
почему в вызове 1
P1
от типаPrint1
несмотря на то, он ссылается на объект типаPrint2
, а в вызове 2 он ведет себя как ссылка наPrint2
-объект?Почему в Call 2
print(B b)
называется отPrint2
, а неprint(C c)
?
Это самая запутанная вещь для меня до сих пор на Java. Спасибо за помощь.
Возможный дубликат [http: // stackoverflow.ком/вопросы/30558552/метод-наиважнейшая-против-класса переменной-наиважнейшая-в-Java] (http://stackoverflow.com/questions/30558552/method-overriding-vs-class-variable-overriding-in-java) –