内部类中接口时的编译器错误

时间:2015-05-06 18:37:24

标签: java

我想在内部类中声明一个接口,它显示编译器错误消息"内部类不能有静态声明"。

public class Apple {       
    //...

    public class InnerApple{
    //...

        public interface InnerInterface{
            //Error: inner classes cannot have static declarations
        }
    }
}

这是否意味着接口在Java中实际上是静态的?

我正在使用Java 1.7。谢谢!

2 个答案:

答案 0 :(得分:3)

接口始终是静态的 - 从某种意义上说,它不能依赖于另一个实例。

有两个级别的内部声明是非常罕见的,但如果它是预期的,我希望至少InnerApple 静态

public class Apple {       
  public static class InnerApple{

    public interface InnerInterface{
        //this does not cause an error
    }
  }
}

在大多数情况下,省略了内部类的关键字 static 。如果是这样,这个类可能包含对周围实例的依赖(而不仅仅是作为静态内部类的类)。

答案 1 :(得分:1)

是的,成员接口是隐式的staticSection 8.5.1 of the JLS州:

  

成员接口是隐式静态的(第9.1.1节)。

因为它不是静态的,所以接口必须是顶层的,没有封闭的类或接口。