尝试用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
的枚举,表示棋子的代码。所有部分都表示为COLOR_PIECE
示例:BLACK_BISHOP
感谢您的帮助
答案 0 :(得分: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());
}
答案 1 :(得分:4)
三元运算符 - 如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));
}
答案 2 :(得分:0)
java中的超级关键字
java中的super关键字是一个引用变量,用于引用直接父类对象。
无论何时创建子类实例,都会隐式创建父类的实例,即由超级引用变量引用。
java超级关键字的用法
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();
}
}