A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yin1031468524 中级黑马   /  2013-6-1 19:16  /  1515 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yin1031468524 于 2013-6-2 13:01 编辑
  1. public class PolyDemo{        
  2.         public static void main(String[] args){
  3.                 A a1 = new A();                 
  4.                 A a2 = new B();        
  5.                 B b = new B();
  6.                 C c = new C();
  7.                 D d = new D();
  8.                
  9.                 System.out.println("⑴    " + a1.show(b));
  10.                 System.out.println("⑵    " + a1.show(c));
  11.                 System.out.println("⑶    " + a1.show(d));
  12.                 System.out.println("⑷    " + a2.show(b));
  13.                 System.out.println("⑸    " + a2.show(c));
  14.                 System.out.println("⑹    " + a2.show(d));               
  15.                 System.out.println("⑺    " + b.show(b));
  16.                 System.out.println("⑻    " + b.show(c));
  17.                 System.out.println("⑼    " + b.show(d));            
  18.                
  19.         }
  20. }

  21. class A {        
  22.         public String show(D obj) {
  23.                 return ("A and D");
  24.         }        
  25.         public String show(A obj) {
  26.                 return ("A and A");
  27.         }
  28. }

  29. class B extends A {
  30.         public String show(B obj) {
  31.                 return ("B and B");
  32.         }
  33.         public String show(A obj) {
  34.                 return ("B and A");
  35.         }
  36.         
  37. }

  38. class C extends B {
  39. }

  40. class D extends B {
  41. }
复制代码
求正确答案,如果都做对了顺便解释下、、、

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

3 个回复

倒序浏览
一句话:
编译看左边,运行看右边。

记住这个基本不会出错。
回复 使用道具 举报
⑴    A and A    传入对象b,b是a的子类,由public String show(A obj)接收
⑵    A and A    传入对象c,c是a的子类,由public String show(A obj)接收
⑶    A and D    传入对象d,直接由public String show(D obj)接收
⑷    B and A    传入对象b,因为多态的局限性,只能访问父类中的成员,而A类中并没有public String show(B obj),所以由public String show(A obj)接收
⑸    B and A    同(4)
⑹    A and D    传入对象d,因为B类继承了A类中的public String show(D obj)方法,所以直接由public String show(D obj)接收
⑺    B and B    传入对象b,直接由public String show(B obj)接收
⑻    B and B    传入对象c,c是b的子类,由public String show(B obj)接收
⑼    A and D    同(6)

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
多态中成员函数的特点:
       在编译时期,参阅引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。
       在运行期间,参阅对象所说的类中是否有调用的方法。
       总结:编译看左边,运行看右边      
在多态中成员变量的特点,无论编译还是运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点,无论编译和运行都参考左边。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马