如何使抽象 super class 的方法适用于 subclasses
How to make a method from abstract super class to work for subclasses
我正在制作国际象棋游戏并尝试对所有棋子使用继承设计。
我想让子类 pawn 使用 Piece 中的 printPiece 方法,但我必须修改每个 piece 的参数。
我知道在 类 上使用相同的参数有点傻,但我不知道如何让超类使用 print 方法而不在其中声明图标。
同样,如果我想在超类上创建 getter,子类 不识别它们。
我试过提供的代码,它无法识别图标是来自 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() {}
}
通过在超级 class 中声明一个 private char icon
,可以防止子 class 访问它。
您可以声明一个 setter 或使其成为父构造函数的一部分,而不是在隐藏父变量的子 class 中重新声明 private char icon
.
当你扩展Piece的时候,你想继承Piece中所有Piece的子类共有的东西。所以你不要在 Pawn 中重新声明变量。
public class Piece
{
private char icon;
public char getIcon() { return icon; }
public void setIcon(char i) { icon = i; }
public Piece(char c) { setIcon(c); }
}
public class Pawn extends Piece
{
public Pawn()
{
super('I');
}
}
这是一种让每个子类都有一个图标的方法,存储在 Piece 中,以及设置和访问它的方法。
我正在制作国际象棋游戏并尝试对所有棋子使用继承设计。 我想让子类 pawn 使用 Piece 中的 printPiece 方法,但我必须修改每个 piece 的参数。 我知道在 类 上使用相同的参数有点傻,但我不知道如何让超类使用 print 方法而不在其中声明图标。 同样,如果我想在超类上创建 getter,子类 不识别它们。
我试过提供的代码,它无法识别图标是来自 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() {}
}
通过在超级 class 中声明一个 private char icon
,可以防止子 class 访问它。
您可以声明一个 setter 或使其成为父构造函数的一部分,而不是在隐藏父变量的子 class 中重新声明 private char icon
.
当你扩展Piece的时候,你想继承Piece中所有Piece的子类共有的东西。所以你不要在 Pawn 中重新声明变量。
public class Piece
{
private char icon;
public char getIcon() { return icon; }
public void setIcon(char i) { icon = i; }
public Piece(char c) { setIcon(c); }
}
public class Pawn extends Piece
{
public Pawn()
{
super('I');
}
}
这是一种让每个子类都有一个图标的方法,存储在 Piece 中,以及设置和访问它的方法。