次のコードについて質問があります (この呼び出しは動的バインディングですか?)。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"); }
}