我們如何調用grand parent的構造函數。我該如何調用盛大父類的構造函數?
例如:B
繼承自A
和C
繼承自B
。
我需要在C
中調用A
的構造函數。有沒有可能創建B
的實例?
如果我需要這個如何在Java中實現。
我們如何調用grand parent的構造函數。我該如何調用盛大父類的構造函數?
例如:B
繼承自A
和C
繼承自B
。
我需要在C
中調用A
的構造函數。有沒有可能創建B
的實例?
如果我需要這個如何在Java中實現。
使用super()
從C和從B到訪問的構造函數
class A {
public A() {
System.out.println("A");
}
}
class B extends A {
public B() {
super();
System.out.println("B");
}
}
class C extends B {
public C() {
super();
System.out.println("C");
}
}
public class Inheritance {
public static void main(String[] args) {
C c = new C();
}
}
輸出:
一個
乙
Ç
注:
如果全部都是默認構造函數,那麼不需要來編寫它會隱式調用它。
如果有參數化的構造函數,然後super(parameter..)
需要
thanxs給了一個例子... – 2010-12-09 12:40:26
你不能調用的A
構造直接的C
構造。
雖然你可以(實際上必須)間接調用它。 B
的每個構造函數都必須調用構造函數A
(顯式或隱式)。由於C
的每個構造函數都需要調用B
的構造函數之一,因此您將總是稱爲A
的構造函數之一。
D同樣也叫B的構造函數,並反過來B就調用構造函數... 有沒有其他選擇調用大父類的構造
一個例子勒夫的回答是:
class A {
A() { System.out.print("A()")};
A(Object o) { System.out.print("A(Object)")};
}
class B {
B() { super(); System.out.print("B()")};
B(Object o) { super(o); System.out.print("B(Object)")};
}
class C {
C() { super(); System.out.print("C()")};
C(Object o) { super(o); System.out.print("C(Object)")};
}
現在稱:
C c = new C();
會產生:A()B()C()
,同時通話ing:
C c = new C(new Object());
將產生:A(Object)B(Object)C(Object)
。
正如你所看到的,通過操縱super()
調用你可以實際調用顯式父構造函數。
實際上,如果你有B類擴展類A,當你創建類B的實例時,你無法避免調用A的構造方法。如果這種機制似乎並不清楚,我推薦這篇關於Java繼承系統的文章:http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html。
下面是一個例子:
class A {
public A() {
doSomethingA();
}
}
class B extends A {
public B() {
super(); // this is the call to the A constructor method
doSomethingB();
}
}
class C extends B {
public C() {
super(); // this is the call to the B constructor method
doSomethingC();
}
}
創建具有new C()
一個新的對象將涉及按順序的A() - B() - C()
你能否提供更多細節,爲什麼你需要調用盛大父類的構造主叫不叫父母的?如果C類需要在不調用類B的構造函數的情況下調用類A的構造函數,那麼聽起來像您可能需要查看您的設計,而不是試圖找出一種方法來跳過調用父類的構造函數。 – ihatemash 2010-12-09 12:49:36