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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 木子子木 中级黑马   /  2015-11-5 15:13  /  3636 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A {
      public void show() {
               show2();
       }
     public void show2() {
             System.out.println("我");
       }
}
class B extends  A {
         pu;blic void show2() {
              System.out.pritnln("爱");
          }
}
class C extends B {
          public void show() {
               super.show();
           }
           public void show2() {
                 System.out.println("你");
           }
}
public  class  ABC {
            public static void main(String[] args) {
                  A  a = new B();
                  a.show();

                  B  b = new C();
                  b.show();
            }
}


答案是:爱    你
但是这个语句的执行过程不是很清楚,感觉有些绕

25 个回复

倒序浏览
支持一下!!!
回复 使用道具 举报
多太掉方法是掉子类的。这个记住就行。
回复 使用道具 举报

你   
回复 使用道具 举报
编译看左边,运行看右边,很简单的.
回复 使用道具 举报
哈哈,这个太伤脑子了
回复 使用道具 举报
A  a = new B();    //多态成员方法的特点:编译看父类,运行看子类,编译时去父类A中去找show()方法,编译通过,                     a.show();       // 运行时去子类B中去找show()方法,B继承A中,所以B中也有show方法,执行show方法调用自己show2方法,输出爱
回复 使用道具 举报
这个15年java视频中的课堂案例,有详细讲解的
回复 使用道具 举报
本帖最后由 WosLovesLife 于 2015-11-6 10:11 编辑

这个很简单,给你推荐个视频,你到网易云课堂 然后搜(高淇java)里面讲多态那部分,有很好的内存分析。很容易理解的。这里这个题:我们可以认为,如果一个类,是直接继承,或者间接继承了另一个类,我们就可以说,这个类是XXX“类型”的。
比如,所有的类,都可以称为是 Object类型的,因为都继承自Object。
这个题里面,C继承B, B和C都继承自A。那C就是B类型的,B和C都是A类型的。
所以在声明变量的时候 A a = new B(); 就是 声明一个A类型的类对象B。
由于继承的特性,B重写了A的方法,但是注意:A里的show2方法并没有就此消失,而是在变量a调用的时候,优先从赋值的对象(也就是B)那里调方法。你如果用super.show2(),依然还能调父类的方法。
B b = new C(); 同理。
回复 使用道具 举报
多态中非静态方法的调用过程,编译时,查看父类是否有此方法,有则通过,没有编译失败;但是运行时,调用子类的方法,因为子类已经覆盖父类,所以运行子类自己的内容;高最关键的一条要记住: 多态中,变化的只有子类; 这句话是多态的精华;
回复 使用道具 举报
顶一个!!!
回复 使用道具 举报
学习啦!
回复 使用道具 举报
第一个运行结果是A父类   第二个直接运行报错 因为你的B  是这样的pu;blic 所以找不到.
回复 使用道具 举报
如果 没有打错标点,符号才是  编译先去看父类有没有 show 方法 没有再去看爷爷类有了 才可以通过 再看 然后再看子类的.
回复 使用道具 举报
jlq 中级黑马 2015-11-7 09:49:32
15#
xxue学习啦  啦
回复 使用道具 举报
WosLovesLife 发表于 2015-11-6 10:08
这个很简单,给你推荐个视频,你到网易云课堂 然后搜(高淇java)里面讲多态那部分,有很好的内存分析。很 ...

那这样的话,是不是也可以不写那个super()方法的
回复 使用道具 举报
石三伢子1 发表于 2015-11-6 10:40
多态中非静态方法的调用过程,编译时,查看父类是否有此方法,有则通过,没有编译失败;但是运行时,调用子 ...

恩呢!get到了!!!谢谢喽,
回复 使用道具 举报
父类引用指向子类对象..
回复 使用道具 举报
我来跑堂。。。
回复 使用道具 举报
石三伢子1 发表于 2015-11-6 10:40
多态中非静态方法的调用过程,编译时,查看父类是否有此方法,有则通过,没有编译失败;但是运行时,调用子 ...

恩呢!get到了!!!谢谢咯!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马