本帖最后由 zxciop1100 于 2012-03-15 16:03:54 编辑

解决方案 »

  1.   

    a1是A的实例,调用A的show方法,根据参数,b是B的实例,因为B是A的子类,也就是"B是A",所有调用show(A obj),就打印了A and A了
      

  2.   

    第四、五个是因为继承,a2是A的实例,B的实现,执行了B里面的show(A obj)
      

  3.   

    你是用eclipse么?
    是的话很简单,debug就知道到底执行那块代码了,自己调试没用的话,就下载个试试。。
      

  4.   

    System.out.println(a1.show(b)); ① a1 是A的对象 ,b是B的对象,而B的直接父类是A所以走 show(A obj) ;
      System.out.println(a1.show(c)); ②a1 是A的对象 ,c是C的对象,C-->B-->A,所以C可以转为A所以也是show(A obj)
      System.out.println(a1.show(d)); ③d是D的对象,所以就直接走show(D obj)了
      
      

  5.   

      System.out.println(a2.show(b)); ④ a2 是B的对象,所以走的是B.show(A obj)
      System.out.println(a2.show(c)); ⑤ a2 是B的对象,所以走的是B.show(A obj)
      System.out.println(a2.show(d)); ⑥a2 是B的对象,由于继承关系,B中也是存在 B.show(D obj),只不过和A中时一样的
      System.out.println(b.show(b)); ⑦.//自己分析
      System.out.println(b.show(c)); ⑧//自己分析
      System.out.println(b.show(d)); ⑨//自己分析
      

  6.   

    System.out.println(a1.show(b)); ①   
    System.out.println(a1.show(c)); ②
    B,C,D都是A类的子类,a1指向A的对象,b指向B的对象,c指向的对象,①中,A是B的父类,所以调用A中的show(A obj)方法,,②同理,return ("A and A")System.out.println(a1.show(d)); ③
    直接将D的对象d传给show(D obj),return ("A and D")System.out.println(a2.show(b)); ④
    System.out.println(a2.show(c)); ⑤
    a2指向B类的对象,多态,故调用B类方法,b和c都是A类的子对象,所以当成A类的参数,调用show(A obj),return ("B and A")System.out.println(a2.show(d)); ⑥
    B类继承了A类的show(D obj)方法,故调用此方法,return ("A and D")System.out.println(b.show(b)); ⑦
    B类对象调用B类方法,show(B obj),return ("B and B")System.out.println(b.show(c)); ⑧
    c是B类的子对象,当成B类参数传进去,show(B obj),return ("B and B")System.out.println(b.show(d)); ⑨
    B类继承了A类的show(D obj)方法,故调用此方法,return ("A and D")