为什么不能将类定义为受保护的?

新手上路,请多包涵

为什么我们不能将类定义为 protected

我知道我们不能,但为什么呢?应该有一些具体的原因。

原文由 M.J. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 790
2 个回答

因为这没有意义。

受保护的类成员(方法或变量)就像包私有的(默认可见性),只是它也可以从子类中访问。

由于在 Java 中没有“子包”或“包继承”这样的概念,因此声明类受保护或包私有是一回事。

不过,您可以将嵌套类和内部类声明为受保护的或私有的。

原文由 Nikita Rybak 发布,翻译遵循 CC BY-SA 2.5 许可协议

如您所知,default 用于包级别访问,而 protected 用于包级别加上非包类,但它扩展了此类(这里要注意的一点是,只有当它可见时,您才能扩展该类!)。让我们这样说:

  • protected 顶级类对其包中的类可见。
  • 现在让它在包(子类)之外可见有点混乱和棘手。应该允许哪些类继承我们的受保护类?
  • 如果所有的类都允许子类化,那么它将类似于 public 访问说明符。
  • 如果没有,则它类似于默认值。

因为没有办法限制这个类只能被少数类子类化(我们不能限制类只能被包中/包外所有可用类中的少数类继承),所以没有使用受保护的访问说明符对于顶级课程。因此这是不允许的。

原文由 Akash5288 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题