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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 新人—小明同学 中级黑马   /  2016-7-7 08:45  /  584 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class A {
  2.        
  3.     public void show() {
  4.         show2();
  5.     }
  6.     public void show2() {
  7.         System.out.println("我");
  8.     }
  9. }
  10. class B extends A {
  11.     public void show() {
  12.         show2();
  13.     }
  14.        
  15.     public void show2() {
  16.         System.out.println("爱");
  17.     }
  18. }
  19. class C extends B {                //多层继承
  20.     public void show() {
  21.         super.show();
  22.     }
  23.        
  24.     public void show2() {  //为什么这个方法不写也不影响程序运行结果呢?
  25.         System.out.println("你");
  26.     }
  27. }
  28. public class Test2DuoTai {
  29.     public static void main(String[] args) {
  30.                
  31.         A a = new B();        //A父类引用指向B子类对象
  32.         a.show();                //爱
  33.                
  34.         B b = new C();        //B父类引用指向C子类对象
  35.         b.show();                //你
  36.        
  37.     }
  38. }
复制代码


5 个回复

倒序浏览
为什么上面C的show2() 方法,不写了.也不影响程序运行结果啊??
回复 使用道具 举报
因为它的父类里已经有 show2 了呀,不写则会调用父类的。
回复 使用道具 举报
cat73 发表于 2016-7-7 08:56
因为它的父类里已经有 show2 了呀,不写则会调用父类的。

我搞错了哈.我想问的是
先不要A a = new A(); a.show();
为什么把B类的show2()方法注释掉,输出结果 你   ..不是编译要看父类有没有show2()先吗?把这注释掉了不是编译就不通过了吗?
回复 使用道具 举报
本帖最后由 cat73 于 2016-7-7 09:13 编辑

A a = new A(),跟 B 类并没有关系。。。如果你想问的是 A a = new B() 的话,理由跟 C 去掉 show2 一样,因为 A 里面已经有 show2 了。
回复 使用道具 举报
cat73 发表于 2016-7-7 09:12
A a = new A(),跟 B 类并没有关系。。。如果你想问的是 A a = new B() 的话,理由跟 C 去掉 show2 一样, ...

{:2_36:}是的.谢谢\(^o^)/~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马