我试图用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构造函数(从工件扩展):
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类只是一个枚举,其中有一个表示国际象棋代码的字段。所有部件的说明如下:COLOR\u-PIECE
示例:
BLACK\u-BISHOP
谢谢你的帮助
java中的超级关键字
java中的super关键字是一个引用变量,用于引用直接父类对象。
每当您创建子类的实例时,都会隐式创建父类的实例,即由超级引用变量引用。
java超级关键字的使用
1) 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();
}
}
如Eran的答案所示,三元运算符可以解决这种情况下的问题。
但有时你不能用这种方式计算超级构造函数参数的值。对于这些情况,您可以使用私有静态辅助函数:
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));
}
三元条件运算符可以解决您的问题:
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());
}
这个Super()的替代品是什么;我代码中的语句...因为它向我显示了一个名为:构造函数调用必须是构造函数中的第一个语句的错误。
无法理解为什么会出现此错误。在记事本中工作,通过cmd运行javac(显然更多的是文件)。如果你需要我链接更多,我可以。我的错误发生在“setCruiseShip”中,我试图将电流链接到超类。错误:对super的调用必须是构造函数中的第一条语句。
我一直收到这样一个错误:“对super的调用必须是构造函数中的第一条语句”。 问题是它是我的构造函数中的第一个语句。 这也是我的超级班级。 我做错了什么?
问题内容: 我正在编写一个LoginRequest类的构造函数,该类扩展了一个名为JsobObjectRequest的类(来自Android的Volley框架,但这与问题完全无关) 使用此代码: 我收到错误:对super()的调用必须是构造函数主体中的第一条语句 相反,此代码可以正常编译: 但这实际上不是一回事吗?在这两种情况下,根据传递给子类构造函数的参数值,在调用超级构造函数之前都要进行一些简
我正在编写一个LoginRequest类的构造函数,该类扩展了一个名为JsobObjectRequest的类(来自Android的凌空框架,但这与问题完全无关) 使用此代码: 我得到了一个错误:对super()的调用必须是构造函数体中的第一条语句 相反,这段代码编译得很好: 但事实上不是完全一样吗?在这两种情况下,在调用超级构造函数之前,都会根据传递给子类构造函数的参数值进行一些简单的计算。既然编
如果将移到构造函数的最后一行,我不明白为什么下面的代码会显示错误。 我已经检查了很多关于StackOverflow的答案,但我仍然不能理解这其中的原因。请帮我用一些简单的例子和解释弄清楚这个错误。