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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 幻之记忆 中级黑马   /  2015-11-13 23:13  /  973 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 幻之记忆 于 2015-11-13 23:58 编辑
  1. class A {  
  2.         public String show(D obj){  
  3.                 return ("A and D");  
  4.         }   
  5.         public String show(A obj){               
  6.                 return ("A and A");  
  7.         }   
  8. }   
  9. class B extends A{  
  10.         public String show(B obj){  
  11.                 return ("B and B");  
  12.         }  
  13.         public String show(A obj){  
  14.                 return ("B and A");  
  15.         }   
  16. }  
  17. class C extends B{}   
  18. class D extends B{}

  19. class  DynamicTest
  20. {        
  21.         public static void main(String[] args){        
  22.                 A a1 = new A();  
  23.                 A a2 = new B();  
  24.                 B b = new B();  
  25.                 C c = new C();   
  26.                 D d = new D();   
  27.                 System.out.println(a1.show(b));  //A and A
  28.                 System.out.println(a1.show(c));  //A and A
  29.                 System.out.println(a1.show(d));  //A and D
  30.                 System.out.println(a2.show(b));  //B and A
  31.                 System.out.println(a2.show(c));  //B and A
  32.                 System.out.println(a2.show(d));  //A and D
  33.                 System.out.println(b.show(b));   //B and B
  34.                 System.out.println(b.show(c));   //B and B
  35.                 System.out.println(b.show(d));         //A and D
  36.         }
  37. }
复制代码

21 个回复

倒序浏览
看不懂啊。。好绕
回复 使用道具 举报
nice非飞 发表于 2015-11-13 23:49
看不懂啊。。好绕

坐等大神分析呢
回复 使用道具 举报
把程序加上断点,一步一步去走看和你分析的一样不
回复 使用道具 举报
好绕啊 要晕了
回复 使用道具 举报
    System.out.println(a1.show(b));  //A and A
    System.out.println(a1.show(c));  //A and A
    System.out.println(a1.show(d));  //A and D
这三句是普通的方法调用调用类A中的方法
System.out.println(a2.show(b));  //B and A
  System.out.println(a2.show(c));  //B and A
  System.out.println(a2.show(d));  //A and D
这三句是有多态存在的,所以符合多态的条件,编译看父类,运行看子类编译的时候看的是父类的,实际运行的System.out.println(a2.show(b));  //B and A
  System.out.println(a2.show(c));  //B and A
这昂据实际运行的是类B中的 public String show(A obj){  
                return ("B and A");  
        } 方法会输出B and A
System.out.println(a2.show(d));  //A and D因为子类没有show(d)所以实际执行的是父类自己的show(d)方法
输出A and D

System.out.println(b.show(b));   //B and B
                System.out.println(b.show(c));   //B and B
                System.out.println(b.show(d));     
后边三句又是普通的方法调用

回复 使用道具 举报
理解好继承的概念就OK了  无非就是继承  方法重写
回复 使用道具 举报
唯我独赞mo 发表于 2015-11-14 10:43
把程序加上断点,一步一步去走看和你分析的一样不

目前还没学eclipse,并不太会用,,,,用断点能分析出来?
回复 使用道具 举报
邸永明 发表于 2015-11-14 15:22
System.out.println(a1.show(b));  //A and A
    System.out.println(a1.show(c));  //A and A
    Sy ...

System.out.println(a2.show(b));为什么不是运行第一个方法呢
回复 使用道具 举报
先顶再看
回复 使用道具 举报
oup 中级黑马 2015-11-14 21:42:21
11#
看晕了,继承还没学
回复 使用道具 举报
搞懂参数列表有什么区别,应该就能理解了
回复 使用道具 举报
我也很好奇答案唉
回复 使用道具 举报
幻之记忆 来自手机 中级黑马 2015-11-15 22:36:46
14#
geqiandesiyu 发表于 2015-11-15 00:10
我也很好奇答案唉

答案倒是运行一下就ok了,关键是得理解
回复 使用道具 举报
同 看不懂~~。。好绕
回复 使用道具 举报
幻之记忆 发表于 2015-11-14 20:20
System.out.println(a2.show(b));为什么不是运行第一个方法呢

看参数啊,传的是b对象,怎么可能用D来接呢
回复 使用道具 举报
ln0491 中级黑马 2015-11-16 12:46:12
17#
学习了。。。。。。。。
回复 使用道具 举报
这种题有意义吗。。。。
回复 使用道具 举报
好好理解一下  无非是继承.多态
回复 使用道具 举报
你是对的 发表于 2015-11-16 21:23
这种题有意义吗。。。。

如果面试你碰到这种题目,你就知道有没有意义了。实际开发中肯定是没什么意义的,但是你得先有开发的机会
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马