Java嵌套接口和内部类

5
为什么Java嵌套接口不能是非静态的?而且为什么内部类不能包含静态的非final成员?
我在阅读Gosling时遇到了这些问题,但是还没有找到答案。

7
你是通过Gosling了吗?他介意吗? - Joachim Sauer
1
@Joachim Sauer http://instantrimshot.com/ - Kevin D
2个回答

8
如果一个嵌套类是非静态的(即内部类),这意味着它的每个实例都绑定到外部类的一个实例。由于接口没有自己的实例,因此似乎将实现类绑定到外部对象并不有用,因此默认情况下将其设为静态是合理的。

内部类是一种嵌套类,它没有明确或隐式地声明为静态。[...] 成员接口(§8.5)始终被隐式声明为静态,因此它们从不被视为内部类。 - Zoltan Balazs
1
所以并不存在内部类接口。 - Zoltan Balazs
2
@Zoltan:问题是为什么没有这样的东西? - Paŭlo Ebermann

2

我不确定为什么内部类中不能有静态的非 final 成员变量,但是由于静态成员变量不与特定对象实例绑定,因此无论它位于内部还是外部类中都没有影响。

例如:

class OuterClass {

  private static int staticMember;

  class InnerClass {

    void incStatic() {
      staticMember++;
    }

  }

}

你可以像在内部类中一样访问静态成员。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接