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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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的方法"。对照结果,我大概能推测出来过程,可是不够清晰,想看看大家是怎么理解。

9 个回复

倒序浏览
C c = new C();
回复 使用道具 举报
向上转型的过程  将C的对象赋值给B的引用
回复 使用道具 举报
发生向上转型后,调用这种被子类覆写过的方法
回复 使用道具 举报
口诀:多态时,父类引用指向子类对象,对于非静态方法,编译时看的是父类,运行时走的是子类
回复 使用道具 举报
面试经常出这种题
回复 使用道具 举报
哎有点头大
回复 使用道具 举报
编译看左边   运行看右边
回复 使用道具 举报
这种代码你自己debug一下跟着系统一步步走就知道了.很简单.
回复 使用道具 举报
多态调方法,编译看左边,运行看右边。因为class B继承了class C,而class C 中 show()又调了show2(),class B 中有show2(),根据运行看右边,所以打出的是clss B 中 show2()的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马