为了账号安全,请及时绑定邮箱和手机立即绑定

如何使抽象超类的方法适用于子类

如何使抽象超类的方法适用于子类

慕斯王 2024-01-25 15:16:32
我正在制作一个国际象棋游戏,并尝试对所有棋子使用继承设计。我想让子类 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() {}}
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

当你扩展 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 中,以及设置和访问它的方法。


查看完整回答
反对 回复 2024-01-25
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

通过在超类中声明 a private char icon,可以防止子类访问它。

您可以声明private char icon一个 setter,或者将其作为父类构造函数的一部分,而不是在子类中重新声明 a(这会隐藏父类的变量)。


查看完整回答
反对 回复 2024-01-25
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信