java - 继承的 getter 返回 null

标签 java abstract-class

我有两个国际象棋类,一个抽象父类 Piece 及其普通子类 Rook

public abstract class Piece {
    public enum Color {
        BLACK, WHITE;
    }

    public enum Name {
        KING, ROOK, BISHOP, QUEEN, KNIGHT, PAWN,
        FERZ, WAZIR
    }

    private Name name;
    private Color color;

    public Piece(Color color) {
        this.color = color;
    }

    public Name getName() {
        return this.name;
    }

-

public class Rook extends Piece {
    private Name name;
    private Color color;

    public Rook(Color color) {
        super(color);
        this.name = Name.ROOK;
    }
}

然后我在另一个类中使用Rook:

new Rook(Piece.Color.BLACK).getName() //null
new Rook(Piece.Color.BLACK).getColor() //BLACK

为什么getName()返回null

最佳答案

您有两个名为 name 的字段:子类中的字段隐藏父抽象类中的字段。 Rook 的构造函数初始化 Rookname。然而,继承的getName()返回的是Piecename的值。如果您删除子类中的该值,它将打印一个非空值(但是您必须将修饰符更改为 protected):

public abstract class Piece {
   ...

   protected Name name;
   protected Color color;

   ...
}

关于java - 继承的 getter 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780922/

相关文章:

oop - 接口(interface)与抽象类或一般的多态性

python - 如何在 python 中使用 abstractproperty 装饰器强制子类设置属性?

c# - 在 C# 中,如何实现一个在函数中调用自身的抽象类,例如比如一类 Addable 对象?

C++:指针和抽象数组类

java - JMeter 无法读取自定义 search_paths 目录

Java FileChannel.size() 与 File.length() - 在 FileChannel.truncate() 之后

java - 自定义 ScrollView 上的淡入淡出

java - 读取和写入多个 HashMap

java - org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper 无法转换为 oracle.jdbc.OracleConnection

c# - 使用派生类将抽象类序列化为 XML。 System.InvalidOperationException < Class xmlns="/> 不是预期的