繁体   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