Java 如何为所有子类定义构造函数
我正在做一个国际象棋游戏,每一个棋子都有一个子类——国王、王后、车等等 每件作品都有一个playerId属性,我想这样设置:Java 如何为所有子类定义构造函数,java,oop,Java,Oop,我正在做一个国际象棋游戏,每一个棋子都有一个子类——国王、王后、车等等 每件作品都有一个playerId属性,我想这样设置: public abstract class Piece { private int playerId; public Piece(int playerId) { this.playerId = playerId; } } public Rook(int playerId) { super(playerId); } 但
public abstract class Piece {
private int playerId;
public Piece(int playerId) {
this.playerId = playerId;
}
}
public Rook(int playerId) {
super(playerId);
}
但这只有在我直接实例化这个片段的情况下才有效(反正我不能,因为它是抽象的)。有没有一种方法可以使此构造函数应用于所有子类,而不必在每个类中手动实现它?通常,您的IDE可以为您这样做。当您扩展工件时,它应该提供添加您需要的所有构造函数的功能。它仍然需要执行,但避免了手动执行 也许您可以通过将其行为与片段分开来避免对片段进行细分
enum PieceType {
KING, QUEEN, ROOK;
}
public class Piece {
private final PieceType pieceType;
private final String playerId;
public Piece ... // one constructor for all.
}
没有简单的方法。在每个子代中,写下如下内容:
public abstract class Piece {
private int playerId;
public Piece(int playerId) {
this.playerId = playerId;
}
}
public Rook(int playerId) {
super(playerId);
}
一种方法(我通常这样做的方式)是使用受保护的片段构造函数
public abstract class Piece {
private int playerId;
protected Piece(int playerId) {
this.playerId = playerId;
}
}
对于每一个子片段,例如Rook
public class Rook extends Piece {
public Rook(int playerId) {
super(playerId);
}
}
这样的话,
Piece
的构造函数对每个人来说都很有用,除了它的后代。您可能需要考虑静态工厂方法
public abstract class Piece
{
private int playerId;
public int getPlayerId()
{
return playerId;
}
public int setPlayerId(int playerId)
{
this.playerId = playerId;
}
}
public class King extends Piece
{
//King specific stuff in here
}
public class ChessFactory
{
public static King newKing(int id)
{
King king = new King();
king.setId(id);
return king;
}
}
这是个好主意,但每件作品都有我需要管理的其他属性。我将在每个类中编写构造函数:P@matt,如果您使用的是IDE,您真的不需要这样做。您能否举例说明需要管理的其他属性?您可能会发现enum的功能远远超出您的预期。第二个建议是非常非面向对象的设计。我宁愿使用piece.getValidMoves()之类的多态方法,也不愿使用大量switch语句。