St.*_*rio 1 java overriding jls
在类C中声明的实例方法m1将覆盖在类A中声明的另一个实例方法m2,如果以下所有条件都为真:
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
但它没有编译,即使被覆盖的方法版本f()具有protected访问修饰符,如我提供的规则的第二点所述.怎么了?
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |