在抽象类及其子类场景中具有相同的属性名称

时间:2016-09-02 06:08:22

标签: java oop abstract-class

我有一个Abstract课程:

public abstract class ClassParent{
    protected Integer id;
    protected String message;
}

及其子类:

public class ClassChild extends ClassParent{
    private Integer id;
    private String message;
}

在这种情况下会发生什么?是继承其基类属性还是会在运行时出错?应该是这些属性的getter和setter在哪里?

1 个答案:

答案 0 :(得分:0)

子类属性隐藏父类属性。这称为阴影并允许在java中。最好避免它。您可以使用以下代码示例

进行验证
public class ClassChild extends ClassParent {
    private Integer id;
    private String message;

    ClassChild(Integer id, String message) {
        this.id = id;
        this.message = message;
    }

    @Override
    public String toString() {
        return "ClassChild{" +
                "id=" + id +
                ", message='" + message + '\'' +
                '}';
    }

    public static void main(String[] args) {
        ClassChild cs = new ClassChild(1, "Test");

        System.out.println(cs);
        System.out.println(cs.message);
        System.out.println(cs.id);
        System.out.println(((ClassParent)cs).id);
        System.out.println(((ClassParent)cs).message);

    }
}