使用包访问继承抽象方法

Vit*_*aly 5 java inheritance abstract

根据JLS的"8.1.1.1",我们有:

如果满足以下任一条件,则类C具有抽象方法:

•C的任何成员方法(第8.2节) - 无论是声明的还是继承的 - 都是抽象的.

•任何C的超类都有一个使用包访问声明的抽象方法,并且没有方法可以覆盖C中的抽象方法或来自C的超类

有趣的是,为什么我们在这里有第二种选择.特别是,为什么我们有完全"包访问".那么"公共"还是"受保护"的方法呢?

Dun*_*nes 3

从最私有到最开放的顺序,java 修饰符依次为:

  • 私人的
  • 包裹
  • 受保护的
  • 民众

子类不能继承另一个包中父类的包方法。因此,根据规则 1,从这样的父类继承的类不会是抽象的。因此,第二条规则的存在是为了解决子类从抽象父类继承并且无法提供抽象包方法的实现的情况。

这是一种荒谬的情况,我绝不会期望在任何地方的任何程序中看到这种情况。但是必须完全指定语言,否则您可能会遇到一个奇怪的错误,该错误允许实例化具有未定义方法的类。