【发布时间】:2016-02-17 19:51:59
【问题描述】:
class Animal {
protected Animal(){
System.out.println("ANIMAL CONSTRUCTOR");
}
public void move(){
System.out.println("ANIMAL Move");
}
}
class Dog extends Animal{
public Dog(){
System.out.println("Dog Constructor");
}
public void move(){
System.out.println("Dog move");
}
}
public class Test {
public static void main(String args[]){
Dog d = new Dog();
d.move();
}
}
上面的代码产生下面的结果:
ANIMAL CONSTRUCTOR
Dog Constructor
Dog move
好像dog实例创建的时候,默认(隐式)也调用Animal构造函数。
这很奇怪,因为我认为明确调用 super() 可以完成同样的工作。
有没有办法打破这个构造函数链,让我的狗实例只调用 Dog 构造函数?
如果没有,有什么原因吗?
【问题讨论】:
-
我认为这可能是一个 XY 问题 meta.stackexchange.com/questions/66377/what-is-the-xy-problem 为什么不希望调用
Animal构造函数? -
“为什么”将此问题与最初识别的问题区分开来,它被标记为受骗。也就是说,几乎可以肯定存在这个问题的早期版本,这可以关闭并指向。
-
这个问题很大程度上(完全?)由this question and its answers 和this question and its answers 共同回答。
标签: java class inheritance