gpt4 book ai didi

java - 为什么你不能在 Java 中有一个 protected 抽象类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:55 24 4
gpt4 key购买 nike

我有一个抽象类,如下所示:

abstract class AbstractFoo implements Bar {
//Code goes here
}

但是,当我尝试使 AbstractFoo protected 时,我收到一个编译时错误,提示它是一个非法修饰符。

protected abstract class AbstractFoo implements Bar {
//Code goes here
}

为什么不能在 Java 中有一个 protected 抽象类?

编辑:我应该提一下,这不是 vanilla Java,实际上是 Blackberry/J2ME。

最佳答案

正如许多其他人指出的那样,这里的限制与您的类是抽象的事实无关,而是与您选择使用的可见性修饰符有关。请记住每个可见性修饰符的含义:

对于您在其中使用关键字的类(class)...

  • private:只对本类可见

  • (default/package private):仅对此类及其包中的类可见

  • protected:对该类、其包中的类以及该类的子类可见

  • public:对任何类可见

顶级类不能声明为私有(private),因为那样的话任何人都无法访问它们。

但您的问题源于为什么它们不能被声明为 protected 。很明显, protected 顶级类(如果它能够存在)将对自身可见(每个类对自身可见)。同样清楚的是, protected 顶级类对其包中的类是可见的。然而,让它对其子类可见是很棘手的。应该允许哪些类继承我们的保护类?

如果是所有这些,那么我们的类还不如public,因为那样的话我们就说任何类都有权访问我们的 protected 类。如果它们都不是,那么我们的类也可能是 package-private,因为只满足其他两个条件(对自身及其包中的东西可见)。它不能是“其中一些”,因为我们需要一种方法来定义哪些类可以访问它,这正是可见性修饰符最初的用途。

因此,由于这些原因,顶级类不能privateprotected;它们必须package-privatepublic

关于java - 为什么你不能在 Java 中有一个 protected 抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com