黑马程序员技术交流社区
标题:
为什么输出的是father???
[打印本页]
作者:
651012160
时间:
2013-12-23 16:30
标题:
为什么输出的是father???
本帖最后由 651012160 于 2013-12-24 20:07 编辑
class Father{
Father(){
this.init();
}
private void init(){
System.out.println("father");
}
}
class Son extends Father{
void init(){
System.out.println("son");
}
}
class Aaa {
public static void main(String[] args){
Son a = new Son();
System.out.println("Hello World!");
}
}
复制代码
作者:
李然
时间:
2013-12-23 17:04
在你实例化子类对象时,子类的构造函数中隐藏了super(),也就自动调用了父类不带参数的构造方法,所以在你的程序里会输出father
作者:
不愿一人
时间:
2013-12-23 17:58
当你实例化子类的对象时,先执行父类的构造方法,在执行子类的构造方法.而father的构造方法里面,this关键字
是指的父类,而不是子类,所以执行的是父类里面的init(),所以输出的是father
作者:
四五六七八
时间:
2013-12-23 18:13
楼上有一点搞错了
父类构造器里面的this在这里不是指父类对象,而是指的子类对象。(具体原因可能是子类调用父类构造器,我也不清楚,网上也没有关于这一点的讨论)
之所以打印father()是因为init()方法时private 不被子类继承,如果你把private去掉 打印的就是son
作者:
天天学习
时间:
2013-12-23 18:29
父类的私有方法不能被子类覆盖,子类方法覆盖父类的方法的前提是子类继承父类的特定方法,但是, Father类的init()方法的权限为private,是私有的,因此不能被子类继承,因此 Son 类中的init()和 Father类的init()并不存在覆盖关系,因此在初始化时Father()这个构造函数会调用父类中的这个权限为private的init()方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2