嵌套Interafce在Java

嵌套Interafce在Java

问题描述:

这是我的Java代码:嵌套Interafce在Java

class A { 
    interface That { 
     void show(); 
    } 
} 

class B implements A.That { 
    public void show() { 
     System.out.println("Hi"); 
    } 
} 

public class MainClass { 
    public static void main(String args[]) { 
     A obj = new A(); 
     obj.That object = new B(); 
     object.show(); 
    } 
} 

由于A是一个类(不是抽象的),我们可以创建它的实例,并比我们可以使用实例的成员。现在界面是成员,所以obj.That应该工作,但javac说obj.That不是包。为什么?

+1

你能编辑你的问题以包含完整的错误信息吗? –

+0

[Java内部类和静态嵌套类]的可能重复(http://*.com/questions/70324/java-inner-class-and-static-nested-class) – DimaSan

当嵌套在类中时,接口总是静态的。因此,您应该访问您的界面声明A.That,而不是obj.That

+0

但是我们可以使用实例访问静态成员,所以为什么不能接口? –

+0

如果'那个'是一个类而不是一个接口,那么你也不能说'obj.That'。无论是接口还是类,或者是枚举,或者什么都不要,你总是应该把类型称为'A.That'。 –

+0

“Compilable”!=“优选”。不要通过实例引用静态成员。你不需要在这里实例化一个'A'实例。 –