当前位置: 首页 > 面试题库 >

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

端木阳荣
2023-03-14
问题内容

我有两节课Parent

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

    public void method() {

    }
}

Child

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

    private void method() {

    }
}

在中Child,我尝试覆盖method提供编译时错误的父类,cannot reduce visibility of a method这是可以的。

但是,为什么此错误不适用于财产a?我也在降低的可见性a,但没有给出错误。


问题答案:

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

从《Oracle JavaTM教程-
继承》
中写道:

您可以在子类中做什么

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



 类似资料:
  • 问题内容: 当您在子类中重写某个方法时降低了其可见性时,为什么编译器会给出错误消息? 问题答案: 因为子类的每个实例仍然需要是基类的有效实例(请参见Liskov替换原理)。 如果子类突然失去了基类的一个属性(例如,一个公共方法),那么它将不再是基类的有效替代品。

  • 今天我对封装感兴趣,对此我有一个基本问题。我理解为什么需要为私有字段添加setter和getter方法。但我看到为public int编写,字符串是其他的setter和getter。为什么我们需要为公共字段添加属性?我已经可以从任何地方访问公共变量。你怎么能用塞特和盖特控制我?谢谢

  • 我在这里(有点)了解jdk 5 Reentry antLock的功能 但为什么我们想要一个“再进入者”锁呢?i、 e如果一个线程已经锁定了一个对象,为什么它需要再次获取它?

  • 我正在努力学习java,但我遇到了一些问题,找到答案对我来说并不简单。我想做的任务似乎很简单。 我想添加一个标签框架。MyFrame是一个JFrame类,具有一些基本的修改,如大小、颜色等。 主代码如下所示: 我得到的结果就是我想要的:正确的结果 当我评论关于标签的最后一行时,它正在改变我的用户界面的外观。它只显示JFrame而没有我的标签。 非工作代码: 这是图形结果:不工作标签 我错过了一些基

  • 问题内容: 在我们的J2EE应用程序中,我们使用EJB-3有状态bean来允许前端代码创建,修改和保存持久性实体(通过JPA-2管理)。 看起来像这样: 非常重要的是,为了避免过早提交,只有方法位于事务内,因此,如果调用,则不会在数据库中插入任何内容。 奇怪的是,在方法中,我们必须调用才能真正访问数据库。实际上,我尝试过发现,我们也可以调用或,以及与“ em有关”的任何东西。 我不明白这一点。与事

  • 我想构建一个抽象类,并指定扩展类监听/处理的某些JavaFX属性。例如,我有: