黑马程序员技术交流社区

标题: 继承多态题,坐等大神分析 [打印本页]

作者: 幻之记忆    时间: 2015-11-13 23:13
标题: 继承多态题,坐等大神分析
本帖最后由 幻之记忆 于 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. }
复制代码

作者: nice非飞    时间: 2015-11-13 23:49
看不懂啊。。好绕
作者: 幻之记忆    时间: 2015-11-13 23:57
nice非飞 发表于 2015-11-13 23:49
看不懂啊。。好绕

坐等大神分析呢
作者: 唯我独赞mo    时间: 2015-11-14 10:43
把程序加上断点,一步一步去走看和你分析的一样不

作者: xiao15779706    时间: 2015-11-14 13:51
好绕啊 要晕了
作者: 邸永明    时间: 2015-11-14 15:22
    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));     
后边三句又是普通的方法调用


作者: 小笨笨天    时间: 2015-11-14 16:43
理解好继承的概念就OK了  无非就是继承  方法重写
作者: 幻之记忆    时间: 2015-11-14 20:13
唯我独赞mo 发表于 2015-11-14 10:43
把程序加上断点,一步一步去走看和你分析的一样不

目前还没学eclipse,并不太会用,,,,用断点能分析出来?
作者: 幻之记忆    时间: 2015-11-14 20:20
邸永明 发表于 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));为什么不是运行第一个方法呢
作者: 18537947462    时间: 2015-11-14 21:34
先顶再看
作者: oup    时间: 2015-11-14 21:42
看晕了,继承还没学
作者: 铁苯锌    时间: 2015-11-14 22:39
搞懂参数列表有什么区别,应该就能理解了
作者: geqiandesiyu    时间: 2015-11-15 00:10
我也很好奇答案唉
作者: 幻之记忆    时间: 2015-11-15 22:36
geqiandesiyu 发表于 2015-11-15 00:10
我也很好奇答案唉

答案倒是运行一下就ok了,关键是得理解
作者: ljx550429    时间: 2015-11-15 23:00
同 看不懂~~。。好绕
作者: 邸永明    时间: 2015-11-16 07:22
幻之记忆 发表于 2015-11-14 20:20
System.out.println(a2.show(b));为什么不是运行第一个方法呢

看参数啊,传的是b对象,怎么可能用D来接呢
作者: ln0491    时间: 2015-11-16 12:46
学习了。。。。。。。。
作者: 你是对的    时间: 2015-11-16 21:23
这种题有意义吗。。。。
作者: 784080960    时间: 2015-11-16 21:41
好好理解一下  无非是继承.多态
作者: 幻之记忆    时间: 2015-11-17 15:36
你是对的 发表于 2015-11-16 21:23
这种题有意义吗。。。。

如果面试你碰到这种题目,你就知道有没有意义了。实际开发中肯定是没什么意义的,但是你得先有开发的机会
作者: yqlbd    时间: 2015-11-17 15:58
遇到这种题目,我需要草稿纸
作者: young_ants    时间: 2015-11-17 17:59
好迷茫的感觉




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2