給定一個隨機類:子類構造函數 - 爲什麼必須爲子類構造函數存在默認構造函數?
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