繁体   English   中英

如何从抽象超级 class 制作方法以适用于子类

[英]How to make a method from abstract super class to work for subclasses

我正在制作国际象棋游戏并尝试使用 inheritance 设计所有棋子。 我想让子类 pawn 使用 Piece 中的 printPiece 方法,但我必须修改每个棋子的参数。 我知道在两个类上使用相同的参数有点傻,但我不知道如何让超类使用 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() {}
}

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

通过在超级 class 中声明一个private char icon ,您可以阻止子类访问它。

与其在子类中重新声明一个private char icon ,它会隐藏父变量,您可以声明一个 setter,或使其成为父构造函数的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM