梵蒂岡之花
2019-05-29 15:33:23
構(gòu)造函數(shù)中的可覆蓋方法調(diào)用有什么問題?我有一個(gè)Wicket頁面類,它根據(jù)抽象方法的結(jié)果設(shè)置頁面標(biāo)題。public abstract class BasicPage extends WebPage {
public BasicPage() {
add(new Label("title", getTitle()));
}
protected abstract String getTitle();}NetBeans通過消息“構(gòu)造函數(shù)中的可覆蓋方法調(diào)用”警告我,但它應(yīng)該有什么問題呢?我能想象的唯一選擇是將其他抽象方法的結(jié)果傳遞給子類中的超級(jí)構(gòu)造函數(shù)。但是很多參數(shù)很難讀懂。
4 回答

郎朗坤
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是一個(gè)有助于理解這個(gè)的例子:
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(); }}
如果您運(yùn)行此代碼,您將獲得以下輸出:
Constructing AUsing CConstructing C
你看?foo()
在C的構(gòu)造函數(shù)運(yùn)行之前使用C。如果foo()
要求C具有已定義的狀態(tài)(即構(gòu)造函數(shù)已完成),那么它將在C中遇到未定義的狀態(tài),并且事情可能會(huì)中斷。而且由于你無法在A中知道被覆蓋的foo()
預(yù)期,你會(huì)收到警告。
添加回答
舉報(bào)
0/150
提交
取消