amb*_*bar 4 java extends interface object implements
请在下面找到解释问题的代码段.
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
I ref = new B();
ref.equals("");
}
}
interface I{
}
class A {
public void method(){
}
}
class B extends A implements I{
}
Run Code Online (Sandbox Code Playgroud)
请参考main(),ref.equals()允许但ref.method()不允许.为什么会这样?
编辑:对象是B(或A或任何其他类)的超类,但同样的方式A也是B的超类.我的问题是为什么A的'method()'在'ref'中不可见,即为什么允许ref.equals()但ref.method()不是?如何进行此方法可见性检查?它是否植根于JVM?
那是因为你确实把它声明为我:
I ref = new B();
Run Code Online (Sandbox Code Playgroud)
您只会看到我在I中声明的方法and the methods from Object.
当你这样做时:
将其声明为A:
A ref = new B();
Run Code Online (Sandbox Code Playgroud)
或将其声明为B.
B ref = new B();
Run Code Online (Sandbox Code Playgroud)
或者把它投到A.
I ref = new B();
((A)ref).method()
Run Code Online (Sandbox Code Playgroud)
您将有权访问:
ref.method()
Run Code Online (Sandbox Code Playgroud)
如果你想从A和我看到方法,你可以在它们之间投射对象.或者也有我的工具.