次のコードについて質問があります(この呼び出しは動的バインディングですか?)。私は約3点を混乱させて感じる。宣言された型と作成された型の関係
まず、変数pqの平均はどうですか? pdはまだPのデータ型かQですか?
第2に、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 ... –