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

问题描述 投票:-1回答:2

我正在制作国际象棋游戏,并尝试对所有棋子使用继承设计。我想使用来自Piece的方法printPiece来使子类pawn生效,但是我必须修改每个piece上的参数。我知道在两个类上具有相同的参数有点傻,但是我不知道如何在不声明图标的情况下使超类使用print方法。如果我想在超类上创建吸气剂,则子类也无法识别它们。

我已经尝试了提供的代码,但不能识别出典当中的图标是'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() {}
}
java class abstract-class abstract superclass
2个回答
1
投票

当扩展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中,并且可以设置和访问它。


0
投票

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

而不是在子类中重新声明private char icon,它遮蔽了父级变量,您可以声明一个setter,或使其成为父级构造函数的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.