構造函數中的可覆蓋方法調用有什么問題?我有一個Wicket頁面類,它根據抽象方法的結果設置頁面標題。public abstract class BasicPage extends WebPage {
public BasicPage() {
add(new Label("title", getTitle()));
}
protected abstract String getTitle();}NetBeans通過消息“構造函數中的可覆蓋方法調用”警告我,但它應該有什么問題呢?我能想象的唯一選擇是將其他抽象方法的結果傳遞給子類中的超級構造函數。但是很多參數很難讀懂。
4 回答
郎朗坤
TA貢獻1921條經驗 獲得超9個贊
這是一個有助于理解這個的例子:
public class Main {
static abstract class A {
abstract void foo();
A() {
System.out.println("Constructing A");
foo();
}
}
static class C extends A {
C() {
System.out.println("Constructing C");
}
void foo() {
System.out.println("Using C");
}
}
public static void main(String[] args) {
C c = new C();
}}如果您運行此代碼,您將獲得以下輸出:
Constructing AUsing CConstructing C
你看?foo()在C的構造函數運行之前使用C。如果foo()要求C具有已定義的狀態(即構造函數已完成),那么它將在C中遇到未定義的狀態,并且事情可能會中斷。而且由于你無法在A中知道被覆蓋的foo()預期,你會收到警告。
添加回答
舉報
0/150
提交
取消
