2015-09-26 137 views
0

試圖在Java中做一些事情,但在構造函數時遇到問題。 我的代碼:繼承構造函數java:調用super()必須是第一條語句

件構造

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; 
} 

主教構造函數(從片擴展):

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,它代表了棋子的代碼。每一件都是說喜歡COLOR_PIECE例如:BLACK_BISHOP

感謝您的幫助

回答

4

三元條件運算符可以解決你的問題:

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()); 
} 
+0

只要一秒鐘之前我,我的朋友:P –

+0

哇非常感謝,這是工作,我從來沒有使用三元運算符,想,如果條件可以取代它所有的時間:/ – Xneyte

4

三元運算符 - 如圖葉蘭的答案 - 可以在這種情況下解決你的問題。

但有時你不能以這種方式計算超級構造函數參數的值。對於這些情況,您可以使用一個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)); 
    } 
0

在Java

Java中的super關鍵字是用來指直接父類對象引用變量super關鍵字。

無論何時創建子類的實例,父類的實例都是隱式創建的,即由超級引用變量引用。

java的超級關鍵字

1)超用於指直接父類的實例變量的使用。 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(); 
    } 
} 
相關問題