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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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("你");
        }
}

20 个回复

倒序浏览
这题难啊
回复 使用道具 举报
运行看右边开始调用的是class C 里面的show b,  show b里面有个super 就又跑到classs b里面找show方法
class b的里面的show方法调用show2() 就跑到class C的show 2输出"你"啊
回复 使用道具 举报
show2是用的C里面的,谁调用就用谁的
回复 使用道具 举报
子类都重写了父的方法,创建的是子类对象,只要子类有的都会运行子类
回复 使用道具 举报
我还没有达到这个层次
回复 使用道具 举报
冯佳老师的视频里详细的讲解
回复 使用道具 举报
简单来说,这个就是多态里面的父类引用指向子类对象,规则是编译看左边(父类),如果父类有那个成员方法,则运行看右边(子类),属于动态绑定,详解可以看官网第九天课程,多态里面的内容,冯佳老师讲解
回复 使用道具 举报
编译看左边,运行看右边
回复 使用道具 举报
学习学习               
回复 使用道具 举报
学习ing......
回复 使用道具 举报
编译看左边,运行看右边,是指父类引用指向子类对象,
回复 使用道具 举报
你new的是C对象,所以调用的是他的方法
回复 使用道具 举报
你new的是C对象,所以调用的是他的方法,因为show()这个方法子类父类都有,所以会调用子类的。
回复 使用道具 举报
心飞扬哈哈 发表于 2016-5-22 22:34
运行看右边开始调用的是class C 里面的show b,  show b里面有个super 就又跑到classs b里面找show方法
cla ...

调用show2() 就跑到class C的show 2输出"你"啊.-------------为什么
回复 使用道具 举报
革命卍 发表于 2016-5-22 22:54
冯佳老师的视频里详细的讲解

class b的里面的show方法调用show2() 就跑到class C的show 2输出"你"啊.---------没解释清楚最后一点
回复 使用道具 举报
因为c继承了b
回复 使用道具 举报
顶贴是一种美德
回复 使用道具 举报
就是循环调用
回复 使用道具 举报
心飞扬哈哈 发表于 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?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马