2011-04-12 83 views
1

LabelField有一個方法 -覆蓋方法規則

public void setPadding(int, int, int, int); 

如果我創建一個擴展LabelField覆蓋setPadding像這樣一類 -

public class CustomPadding extends LabelField { 

    public void setPadding(int, int, int, int){ 
     super.setpadding(5,5,5,5); 
    } 
} 

每次我創建CustomPadding不應該的實例我的自定義setPadding方法被調用嗎?

目前不是,我不知道爲什麼?

回答

3

爲什麼會自動調用setPadding方法?它不會被自動調用 - 明確地說,它必須實際上調用它。你有什麼理由相信LabelField的構造函數鏈中的某些內容會調用它嗎?

如果你想使customPadding(它應該用PascalCase命名,btw)總是以特定的方式設置它的填充,你應該從構造函數中調用它。

+0

我覺得setPadding應該被調用,因爲Field類的paint方法在被覆蓋時會自動調用。這是因爲paint()是抽象的嗎? – user701254 2011-04-12 21:27:08

+2

@ user701254:不,這是因爲調用了paint()來顯示UI。它*具有*被稱爲任何顯示。方法不是神奇地稱呼的 - 有些東西需要稱呼它們。這聽起來像你會受益於編寫Java中的一些控制檯應用程序,然後再轉到UI代碼中......控制檯應用程序讓您在獲得Swing的所有複雜性之前瞭解有關該語言的更多內容。 – 2011-04-12 21:50:18

+0

好的,感謝幫幫我。 – user701254 2011-04-13 08:53:35

1

should'nt我的自定義setPadding方法被調用?

如果原來的setPadding不是首先被調用,

即,如果LabelField.setPaddingLabelField,則應調用customPadding.setPadding來調用customPadding.setPadding。 (但是,如果LabelField.setPadding不會被稱爲,則customPadding.setPadding也不應該)。

您應該提供更多的代碼。 (例如,假設您的參數名稱實際上是customPadding。)

+0

好的,LabelField應該在其構造函數中調用setpadding來調用它? – user701254 2011-04-12 21:46:33

+0

*某人應該在某個時候調用'setPadding'來執行該方法。也就是說,在它的構造函數中調用'setPadding'的'LabelField'是*充分的*但不是*必需*的條件。 – aioobe 2011-04-12 21:48:22