[英]Calling the constructor of an abstract class
假設我有以下類結構:
public class A{
A(int a){
...
}
}
abstract class B extends A{
}
public class C extends B{
C(int a){
super(a);
}
}
在myMethod不會調用A的構造函數的意義上,此代碼無效。 有沒有辦法做到這一點?
我最終想要做的是在不影響其功能的情況下為一組類添加功能。 所有這些類當前都擴展了一個公共類(runtimeException),所以我想添加一個中間抽象類。
(編輯:C中的代碼不應該是一個方法,它應該是一個構造函數)
你不能像你寫的那樣申報B
級。 要創建B
的實例,您需要調用A
構造函數:
public abstract class B extends A {
public B() {
super(10); //or other number
}
}
public class C extends B {
public C(int a) {
super();
}
}
換句話說,你總是調用“上一級”的構造函數,無論類是否是抽象的。
為了避免這個奇怪的數字10
我編寫並缺少C
構造函數的int
參數,我建議至少為子類構造函數添加父類構造函數對任何extends
對類所需的所有參數。
我經常看到的是這樣的模式:
public class A{
A(int a){
...
}
}
abstract class B extends A{
B(int a) {// "proxy" constructor"
super(a);
}
}
public class C extends B{
C(int a) {
super(a);
}
void myMethod(int a){
// super(a); <- note this is invalid code, you can only call this from the constructor
new C(0); // <-- this is valid
}
}
當然,它有點冗長和樣板,但它允許您避免重復任何功能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.