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

2022-08-31 09:49:09

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

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


答案 1

因为这毫无意义。

受保护的类成员(方法或变量)与包私有(默认可见性)类似,只是它也可以从子类访问。
由于Java中没有“子包”或“包继承”之类的概念,因此声明类受保护或包私有将是一回事。

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


答案 2

如您所知,默认值用于包级别访问,受保护用于包级别加非包类,但它扩展了此类(此处需要注意的是,只有在类可见时才能扩展该类!让我们这样说:

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

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