【发布时间】:2015-01-31 07:38:26
【问题描述】:
在类 C 中声明的实例方法 m1 覆盖另一个实例 方法 m2,在 A 类中声明,当且仅当满足以下所有条件时:
C 是 A 的子类。
m1 的签名是 m2 签名的子签名(第 8.4.2 节)。
要么:
m2 是公共的、受保护的或声明为具有默认访问权限的同一 打包为 C,或
m1 覆盖方法 m3(m3 与 m1 不同,m3 与 m2 不同), 这样 m3 会覆盖 m2。
这似乎与以下代码不矛盾:
public class Main {
public void f() { }
public static class A extends Main {
protected void f() { }
}
public static void main(String[] args) {
}
}
但它没有编译,即使方法 f() 的覆盖版本具有 protected 访问修饰符,正如我提供的规则的第二点所述。怎么了?
【问题讨论】:
标签: java overriding jls