我正在制作一款象棋游戏,并试图弄清楚是否有办法让我的抽象类“Piece”有一种方法可以返回像Pawn或Rook这样的具体实现的新实例。我可以在抽象类中创建静态工厂方法吗?
例如:
static public Piece newNorthPiece(){
return new Piece(true);
}
除,而不是返回一块我希望它返回任何调用该方法的类。所以如果我打电话给Pawn.newNorthPiece()我希望它返回给我一个新的Pawn(true)。 我想这样做,而不必为扩展Piece类的每个类都写一个新的工厂方法。
您需要调用具体的实现。因此无论是'KnightPiece','PawnPiece'等。您的工厂方法应该确定要调用哪个实现。你有没有定义Pawn? – Obicere
我相当肯定这是不可能的。超类不知道它的子类。真正的问题是为什么你不想为每个班级写一个新的工厂方法。 – Gendarme
Obicere我不确定你的意思,但是我已经为所有作品制作了课程。 –