ipk*_*iss 0 java access-modifiers
我有以下代码:
public class Library {
public void myFunction() {
// do something
}
}
public class Book extends Library{
protected void myFunction() { // Error here
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有错误,因为Book类试图用较弱的访问修饰符覆盖supper类的函数.我知道这是Java的规则.但我很好奇为什么会这样?它可能导致什么问题?
小智 5
从一个完全不同的包中考虑:
new Book().myFunction() // clearly, no access
((Library)new Book()).myFunction() // now ... access?
Run Code Online (Sandbox Code Playgroud)
这个问题真的可以归结为myFunction是虚拟的 ; 调用的方法取决于运行时类型而不是表达式的静态类型.(我相信C#实际上允许使用new修饰符的非虚方法.)