为什么我们可以降低扩展类中属性的可见性?

2022-09-02 20:02:28

我有两个类:Parent

public class Parent {
    public String a = "asd";

    public void method() {

    }
}

和:Child

public class Child extends Parent{
    private String a = "12";

    private void method() {

    }
}

在 中,我尝试覆盖父级,这给出了编译时错误,这很好。Childmethodcannot reduce visibility of a method

但是,为什么此错误不适用于属性?我也降低了 的可见性,但它没有给出错误。aa


答案 1

这是因为和不同的东西。 s ,因为它们是方法。继承不适用于字段。Parent.aChild.aChild#method()@OverrideParent#method()

Oracle JavaTM Tutorials - Heritage中,它写道:

您可以在子类中执行的操作

  • 继承的字段可以直接使用,就像任何其他字段一样。
  • 您可以在子类中声明与超类中字段同名的字段,从而将其隐藏(不推荐)。
  • 您可以在子类中声明不在超类中的新字段。

答案 2

你不能。您并没有降低 - 您正在创建一个新的,单独的字段,也称为 。aa