【发布时间】:2020-02-28 18:11:27
【问题描述】:
我正在制作一个国际象棋游戏并尝试对所有棋子使用继承设计。 我想让子类 pawn 使用 Piece 中的 printPiece 方法,但我必须修改每件的参数。 我知道在两个类上使用相同的参数有点傻,但我不知道如何让超类使用 print 方法而不在其中声明图标。 如果我想在超类上创建吸气剂,子类无法识别它们。
我已经尝试了提供的代码,但它无法识别出图标是来自 pawn 的“i”,它只是使用超类方法并写入 null。 还尝试使参数受保护但结果相同。
public abstract class Piece{
private String name;
private int value;
private boolean alive;
private char icon;
public Piece() {}
public abstract Coordinate movePiece(Coordinate coor);
public abstract boolean canMovePiece();
public void printPiece()
{
System.out.print(icon);
}
}
public class Pawn extends Piece {
private String name;
private int value;
private boolean white;
private char icon;
public Pawn(boolean pWhite) {
super();
this.value = 1;
this.name = "Pawn";
this.white = pWhite;
if(pWhite) {this.icon = 'I';}
else {this.icon = 'i';}
}
public Coordinate movePiece(Coordinate coor){}
public boolean canMovePiece() {}
}
【问题讨论】:
-
您当前的代码有什么问题?每件作品都应该有自己的“图标”字符,不是吗?
-
@HovercraftFullOfEels 是的,但是当我打印一个有棋子的棋盘正方形时(matrix[1][0] = new Pawn(true) ,矩阵由 Piece 对象组成,然后我选择将哪些转换为碎片)和 matrix[1][0].printPiece() 它不打印任何东西
标签: java class abstract-class abstract superclass