У меня возник вопрос о следующем коде (это вызов динамической привязки?). Я чувствую смущение около 3 баллов.Отношение между объявленным типом и созданным типом
Во-первых, какое среднее значение переменной pq? Показывает ли pd тип данных P или Q?
Во-вторых, когда я вызываю метод pq.m (pp), почему результат будет Q :: P, но не P :: Q?
Наконец, что это означает ((P) qq) .m (qq) ;? Надеюсь, кто-то может решить мою проблему.
Результат следующий код будет
P :: Q, Q :: P, Q :: Q, R :: P, Q :: P, Q :: Q, Q :: Q
class Test {
public static void main(String[] args) {
P pp = new P();
Q qq = new Q();
R rr = new R();
P pq = qq;
pp.m(qq);
pq.m(pp);
pq.m(qq);
rr.m(pp);
qq.m(pq);
qq.m(qq);
((P) qq).m(qq);
}
}
class P {
public void m(P p){System.out.println("P::P"); }
public void m(Q p){System.out.println("P::Q"); }
public void m(R c){System.out.println("P::R"); }
}
class Q extends P {
public void m(P p){System.out.println("Q::P"); }
public void m(Q p){System.out.println("Q::Q"); }
public void m(R c){System.out.println("Q::R"); }
}
class R extends Q {
public void m(P p){System.out.println("R::P"); }
public void m(Q p){System.out.println("R::Q"); }
public void m(R c){System.out.println("R::R"); }
}
Нет переменной 'pd', поэтому трудно ответить на ваш первый вопрос ... –
Но чтобы ответить на все ваши вопросы, вы должны прочитать о [наследование в Java] (http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html). –
где pd ... ???? –