黑马程序员技术交流社区

标题: 多态Demo为什么? [打印本页]

作者: 新人—小明同学    时间: 2016-7-7 08:45
标题: 多态Demo为什么?
  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. }
复制代码



作者: 新人—小明同学    时间: 2016-7-7 08:46
为什么上面C的show2() 方法,不写了.也不影响程序运行结果啊??
作者: cat73    时间: 2016-7-7 08:56
因为它的父类里已经有 show2 了呀,不写则会调用父类的。
作者: 新人—小明同学    时间: 2016-7-7 09:09
cat73 发表于 2016-7-7 08:56
因为它的父类里已经有 show2 了呀,不写则会调用父类的。

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

A a = new A(),跟 B 类并没有关系。。。如果你想问的是 A a = new B() 的话,理由跟 C 去掉 show2 一样,因为 A 里面已经有 show2 了。

作者: 新人—小明同学    时间: 2016-7-7 12:23
cat73 发表于 2016-7-7 09:12
A a = new A(),跟 B 类并没有关系。。。如果你想问的是 A a = new B() 的话,理由跟 C 去掉 show2 一样, ...

{:2_36:}是的.谢谢\(^o^)/~




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