黑马程序员技术交流社区

标题: 遇到一道多态题,自己有点乱 [打印本页]

作者: jinxiaodong    时间: 2016-1-4 19:57
标题: 遇到一道多态题,自己有点乱
  1. class B {
  2.     public void show() {
  3.         show2();
  4.     }
  5.     public void show2() {
  6.         System.out.println("B的方法");
  7.     }
  8. }
  9. class C extends B {
  10.     public void show() {
  11.         super.show();
  12.     }
  13.     public void show2() {
  14.         System.out.println("C的方法");
  15.     }
  16. }
  17. public class Demo8 {
  18.     public static void main(String[] args) {
  19.         B b = new C();
  20.         b.show();
  21.     }
  22. }
复制代码


代码如上,按我自己分析结果应该是"B的方法",实际运行的结果是"C的方法"。对照结果,我大概能推测出来过程,可是不够清晰,想看看大家是怎么理解。
作者: Lewisky    时间: 2016-1-5 11:30
C c = new C();
作者: Lewisky    时间: 2016-1-5 11:34
向上转型的过程  将C的对象赋值给B的引用
作者: Lewisky    时间: 2016-1-5 11:38
发生向上转型后,调用这种被子类覆写过的方法
作者: android1.0    时间: 2016-1-9 22:56
口诀:多态时,父类引用指向子类对象,对于非静态方法,编译时看的是父类,运行时走的是子类
作者: 793646122@qq.co    时间: 2016-1-11 17:41
面试经常出这种题
作者: 13653692693    时间: 2016-1-12 15:13
哎有点头大
作者: 苗超维    时间: 2016-1-22 21:13
编译看左边   运行看右边
作者: WosLovesLife    时间: 2016-1-22 22:17
这种代码你自己debug一下跟着系统一步步走就知道了.很简单.
作者: liuzegang    时间: 2016-2-7 23:32
多态调方法,编译看左边,运行看右边。因为class B继承了class C,而class C 中 show()又调了show2(),class B 中有show2(),根据运行看右边,所以打出的是clss B 中 show2()的方法




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