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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 江楠大盗 中级黑马   /  2016-8-22 21:52  /  624 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test2_Polymorphic {
        public static void main(String[] args) {
                A a = new B();
                a.show();
        }
}
class A {
        public void show() {
                show2();
        }
        public void show2() {
                System.out.println("我是父类的show2输出");
        }
}
class B extends A {
        public void show() {
                super.show();
        }
        public void show2() {
                System.out.println("我是子类的show2输出");
        }
}
代码如上,为什么super.show()方法调用父类的show方法后,在方法内部不是就近调用父类的show2方法输出“我是父类的show2输出”,而是调用子类的show2方法输出“我是子类的show2输出”???

2 个回复

倒序浏览
(首先:不确定准确)1.先加载B的对象中先根据子类B隐藏构造中的Super访问父类中的构造show()——书或者教程中说是动态捆绑(暂且理解这是java制定的像数学中1+1等于2的道理一样)——访问子类中的show()【实质产生的是子类对象】
2.我通常会认为:在创建子类对象时候,这个对象会将子类中及父类中所有属性及行为不交集部分(交集的子类优先)加载到子类对象中,然后再通过面向对象的思路来理解可能更符合面向对象的思想(抽象到实例),
回复 使用道具 举报
方法重写了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马