![](/img/trans.png)
[英]Constructor call must be the first statement in a constructor in super()
[英]Inherited constructor java : Call to super() must be first statement
試圖用Java做一些事情,但是在構造函數時我遇到了問題。 我的代碼:
件構造器
public Piece(Chessboard chessboard, Position position, Color color, String name, char symbol) {
this.board = chessboard;
this.position = position;
this.color = color;
this.name = name;
this.symbol = symbol;
}
Bishop構造函數(從Piece擴展):
public Bishop(Chessboard board, Position position, Color color) {
char symbole;
if(color.equals(Color.BLACK))
symbole = Symbol.BLACK_BISHOP.getCode();
else
symbole = Symbol.WHITE_BISHOP.getCode();
super(board, position, color, "Bishop", symbole);
}
當我嘗試這樣做時,我在超級調用上遇到錯誤:“ super()必須是構造函數主體中的第一條語句”。
我唯一看到的解決方法是用一個表達式替換super()調用中的'symbole',該表達式將在color
函數中獲得正確的符號,但我無法做到這一點?
我的Symbol類只是帶有域code
的枚舉,該域code
表示棋子的代碼。 所有作品都以類似於COLOR_PIECE
形式陳述: BLACK_BISHOP
謝謝你的幫助
三元條件運算符可以解決您的問題:
public Bishop(Chessboard board, Position position, Color color) {
super(board, position, color, "Bishop", color.equals(Color.BLACK)?Symbol.BLACK_BISHOP.getCode():Symbol.WHITE_BISHOP.getCode());
}
如Eran的答案所示,三元運算符可以在這種情況下解決您的問題。
但是有時您無法以這種方式計算超級構造函數參數的值。 對於這些情況,您可以使用private static
幫助器函數:
public class Bishop {
private static char computeSymbol(Color color) {
<complicated computation>
return result;
}
public Bishop(Chessboard board, Position position, Color color) {
super(board, position, color, "Bishop", computeSymbol(color));
}
Java中的超級關鍵字
java中的super關鍵字是一個引用變量,用於引用直接父類對象。
每當創建子類的實例時,都會隱式創建父類的實例,即由超級引用變量引用。
java super關鍵字的用法
1)super用於引用直接父類實例變量。
2)super()用於調用直接父類構造函數。
3)super用於調用直接父類方法。
例如 -
class Example{
Example(){System.out.println("Example is created");}
}
class Sample extends Example{
Sample(){
super();//will invoke parent class constructor
System.out.println("Sample is created");
}
public static void main(String args[]){
Sample b = new Sample();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.