[英]If I have a class that extends JPanel, should I define buttons in constructor or add() them?
[英]Should I define a constructor is a class that extends an abstract class?
如果我有這個抽象類:
package com.abc;
public abstract class Player {
private String name;
public Player(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
當我從抽象類擴展一個新類時,新類默認情況下是否使用繼承的構造函數,還是必須創建一個調用“ super”的構造函數?
默認情況下,它將使用默認的空構造函數。 由於您顯式提供了一個構造函數,因此不會獲得默認的構造函數。 因此, 是的,您必須顯式調用super(String)
。 如果您不希望使用該限制,則應在Player
添加一個空的構造函數。
protected Player() { // <-- only visible to sub-classes.
// ... implicit super();
}
默認情況下,如果未顯式添加構造函數,則Java編譯器將在其中添加默認構造函數和super()
。 由於您的Player
類具有參數化構造函數,因此您需要調用super
我必須創建一個調用“ super”的構造函數嗎?
是的,您需要顯式添加默認構造函數。
public Player() {}
要么,
您可以在子類中添加帶有參數的super()
。 如下所示:
public ChildClass(String name) {
super(name);
}
如果需要,還可以重載構造函數。 閱讀有關構造函數重載和super()
更多信息 。
由於您的基類Player
缺少默認的構造函數 (如果您提供其他構造函數,則自動生成的構造函數將被有效刪除),因此派生類中的所有構造函數都需要從String
顯式調用該構造函數。
您可以通過為傳遞的name
使用具有適當值的super
來實現。 那必須是任何子類構造函數中的第一條語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.