黑马程序员技术交流社区

标题: 为什么b.show( )运行结果是"你" [打印本页]

作者: zhangshouwei    时间: 2016-5-22 22:23
标题: 为什么b.show( )运行结果是"你"
class Test2_Polymorphic {
        public static void main(String[] args) {
                /*A a = new B();
                a.show();*/
               
                B b = new C();
                b.show();
        }
}
class A {
        public void show() {
                show2();
        }
        public void show2() {
                System.out.println("我");
        }
}
class B extends A {
        public void show() {
                show2();
        }
        public void show2() {
                System.out.println("爱");
        }
}
class C extends B {
        public void show() {
                super.show();
        }
        public void show2() {
                System.out.println("你");
        }
}

作者: 琥珀    时间: 2016-5-22 22:28
这题难啊
作者: 心飞扬哈哈    时间: 2016-5-22 22:34
运行看右边开始调用的是class C 里面的show b,  show b里面有个super 就又跑到classs b里面找show方法
class b的里面的show方法调用show2() 就跑到class C的show 2输出"你"啊
作者: ft352177    时间: 2016-5-22 22:35
show2是用的C里面的,谁调用就用谁的
作者: lifeiwangyue    时间: 2016-5-22 22:45
子类都重写了父的方法,创建的是子类对象,只要子类有的都会运行子类
作者: yangyaoguang    时间: 2016-5-22 22:51
我还没有达到这个层次
作者: 革命卍    时间: 2016-5-22 22:54
冯佳老师的视频里详细的讲解
作者: SkyBlack    时间: 2016-5-22 23:02
简单来说,这个就是多态里面的父类引用指向子类对象,规则是编译看左边(父类),如果父类有那个成员方法,则运行看右边(子类),属于动态绑定,详解可以看官网第九天课程,多态里面的内容,冯佳老师讲解
作者: woshijingke    时间: 2016-5-22 23:17
编译看左边,运行看右边
作者: sasyun    时间: 2016-5-22 23:47
学习学习               
作者: 善良的死神达乐    时间: 2016-5-22 23:59
学习ing......
作者: 即墨    时间: 2016-5-23 00:06
编译看左边,运行看右边,是指父类引用指向子类对象,
作者: kindleCode    时间: 2016-5-23 12:24
你new的是C对象,所以调用的是他的方法
作者: yuanqingleivip    时间: 2016-5-23 12:59
你new的是C对象,所以调用的是他的方法,因为show()这个方法子类父类都有,所以会调用子类的。
作者: zhangshouwei    时间: 2016-5-23 23:31
心飞扬哈哈 发表于 2016-5-22 22:34
运行看右边开始调用的是class C 里面的show b,  show b里面有个super 就又跑到classs b里面找show方法
cla ...

调用show2() 就跑到class C的show 2输出"你"啊.-------------为什么
作者: zhangshouwei    时间: 2016-5-23 23:34
革命卍 发表于 2016-5-22 22:54
冯佳老师的视频里详细的讲解

class b的里面的show方法调用show2() 就跑到class C的show 2输出"你"啊.---------没解释清楚最后一点
作者: kunwenli    时间: 2016-5-23 23:37
因为c继承了b
作者: sunchuan    时间: 2016-5-23 23:38
顶贴是一种美德
作者: wei19910428    时间: 2016-5-23 23:38
就是循环调用
作者: zhangshouwei    时间: 2016-5-23 23:38
心飞扬哈哈 发表于 2016-5-22 22:34
运行看右边开始调用的是class C 里面的show b,  show b里面有个super 就又跑到classs b里面找show方法
cla ...

class b的里面的show方法调用show2() 就跑到class C的show 2输出"你"啊--------------为什么跑到classC的show2?
作者: 心飞扬哈哈    时间: 2016-5-25 00:23
zhangshouwei 发表于 2016-5-23 23:38
class b的里面的show方法调用show2() 就跑到class C的show 2输出"你"啊--------------为什么跑到classC的 ...

运行看右边




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