给定一个随机类:子类构造函数 - 为什么必须为子类构造函数存在默认构造函数?
public class A<T> {
public T t;
public A() {} // <-- why is this constructor necessary for B?
public A (T t) {
this.setT(t);
}
public T getT() {
return this.t;
}
protected void setT (T t) {
this.t = t;
return;
}
}
和扩展类:
public class B extends A<Integer> {
public B (Integer i) {
this.setT(i);
}
}
为什么B都必须一有空的构造?我会假定它会使用类似的构造函数而不是默认的构造函数。我尝试编译没有默认的构造函数,但我得到没有它的以下消息...
java.lang.NoSuchMethodError: A: method <init>()V not found at B.<init>
任何人都可以解释这是为什么?
这是正确的说,当一个对象被实例化时,它所继承的所有对象也被实例化(如构建块)? – Zak 2012-02-21 01:20:04
我宁愿说当你实例化一个对象时,构造函数负责初始化对象。如果你继承它,那么子类的构造函数负责初始化添加的部分,而超级构造函数负责剩下的部分。这一直递归地应用于Object类本身。 – 2012-02-21 01:27:56