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

为什么最终的Java类中允许使用受保护的成员?

夏侯楷
2023-03-14
问题内容

为什么在最终课程中允许受保护的成员?

这不应该是编译时错误吗?

编辑:正如人们指出的那样,您可以使用默认修饰符来获得相同的程序包访问权限。它的行为应该完全相同,因为protected是默认+子类,而final修饰符明确地拒绝了子类,因此我认为答案不只是提供相同的程序包访问。


问题答案:

protected改性剂是必要的方法其覆盖protected从基类的方法,在没有那些构件暴露于所述public

通常,您可以引入很多不必要的规则来取缔不合理的组合(例如protected static),但这并没有太大帮助。你不能取缔愚蠢。



 类似资料:
  • 问题内容: 考虑从官方的这段代码OpenJDK源码的: 这里的用例是什么,为什么一般来说编写这样的代码有意义? 问题答案: 仍然可以通过同一包中的代码访问成员。我的猜测是,该类在某些早期版本(可能甚至不是公共版本)中曾经是非最终的,然后被设置为最终的,并且受保护的方法保持原样,因为在使用它的同一包中可能有代码(而不是之所以将其更改为私有包,仅仅是因为没有人看到这样做的好处。

  • 问题内容: 我在日食中收到很多这样的警告: 变量“ myVariable”必须是私有的,并且具有访问器方法。 我想得到它们是因为我没有在eclipse中手动将protectedAllowed设置为true。但是为什么默认情况下将其设置为false?我不应该使用受保护的属性吗? 问题答案: 从理论上讲,受保护的属性(变量)在面向对象的语言中是一种反模式。如果仅子类需要访问其超类的成员属性,则将属性本

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

  • 问题内容: Java 8最有用的功能之一是接口上的新方法。引入它们的原因基本上有两个(可能还有其他原因): 提供实际的默认实现。例: 允许JDK API演进。例: 从API设计人员的角度来看,我希望能够在接口方法上使用其他修饰符,例如。在添加便捷方法时,这将很有用,以防止在实现类时“意外”覆盖: 如果已经上过课,以上是已经很普遍的做法: 现在,并且显然是相互矛盾的关键字,但是默认关键字本身并没有严

  • 我试图理解类中受保护成员的行为。我有一个类,其中包含受保护的整数。 类别: 还有另一个包,它有3个类,和。继承层次结构如下: 第1子类 子课堂 第3子类 在上述代码中,,,,,和工作正常,没有任何可见性问题。但是,,存在可见性问题。 根据JLS§6.6.2.1, 让C是声明受保护成员的类。只允许在C的子类S的主体内进行访问。 此外,如果Id表示实例字段或实例方法,则: 如果访问是通过限定名Q.Id

  • 问题内容: 我了解为什么编译器不接受以下内容: 让我感到困惑的是,编译器接受以下内容,并且单元测试通过了: 为什么上述方法有效并且可以正常工作?欢迎使用指向JLS相关部分的指针(15.27.2节仅讨论局部变量)。 问题答案: 我们都同意第一个例子不能用,因为局部变量或参数必须是最终的或有效的最终才能在lambda表达式主体中使用。 但是您的第二个示例不涉及局部变量或参数,而是实例字段。Lambda