簡體   English   中英

繼承的構造函數java:對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM