是Object层次结构的接口部分吗?

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?

Fra*_*ank 7

那是因为你确实把它声明为我:

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和我看到方法,你可以在它们之间投射对象.或者也有我的工具.