![](/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.