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

为什么不能降低方法在Java子类中的可见性?

史劲
2023-03-14
问题内容

当您在子类中重写某个方法时降低了其可见性时,为什么编译器会给出错误消息?


问题答案:

因为子类的每个实例仍然需要是基类的有效实例(请参见Liskov替换原理)。

如果子类突然失去了基类的一个属性(例如,一个公共方法),那么它将不再是基类的有效替代品。



 类似资料:
  • 问题内容: 我有两节课: 和: 在中,我尝试覆盖提供编译时错误的父类,这是可以的。 但是,为什么此错误不适用于财产?我也在降低的可见性,但没有给出错误。 问题答案: 这是因为和是不同的东西。 s ,因为它们是方法。继承不适用于字段。 从《Oracle JavaTM教程- 继承》 中写道: 您可以在子类中做什么 继承的字段可以像其他任何字段一样直接使用。 您可以在子类中声明一个与超类中的名称相同的字

  • 问题内容: 继续这个问题:为什么不能降低Java子类中方法的可见性? 我需要创建几乎与class相同的类,除了不能做某些可以做的事情。 作为一个懒惰的程序员,我试图继承,只是为了迎接无法降低方法可视性的错误。h!.. 现在是供应商提供的API,我的意图是封装此API,以便更易于使用。 我想知道解决此问题的最佳实践是什么? 问题答案: 两种选择: 如果您需要与保持相同的接口(以便客户端代码可以使用这

  • 问题内容: 我收到此编译器错误: 您不能降低继承方法的可见性。 我有以下代码 在此,父类具有公开的方法,并由私有的子类覆盖。现在,编译器抛出了我无法降低可见度的错误。从技术上讲,每当我创建一个分配给类型父对象的对象时,由于该方法被覆盖,因此将始终调用TestClass的func(),那么为什么还要注意可见性呢?这个错误背后的原因是什么?有人可以清楚地解释我吗? 问题答案: 这是因为子类有知名度的方

  • 为什么我们不能降低能见度,但可以提高能见度? 此外,我需要实现模板模式,其中可见的公共方法只能是基类。

  • 问题内容: 在不止一次的情况下,我发现自己希望获得Java中无法实现的可变可见性。我希望某些成员在他们自己的班级和任何子班级中可见,但对于包的其余部分或世界其他地方不可见。换句话说,我想要这样: 但是,Java的设计师只给了我这个: 我想要这样的典型情况是在创建抽象类时。有时我发现抽象的父母需要访问某些成员,但是具体的孩子也需要访问。我可以通过成为成员来给他们这种访问权限,但这在我真的不想要的时候

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