【问题标题】:java nested interfaces and inner classesjava嵌套接口和内部类
【发布时间】:2011-08-01 09:30:03
【问题描述】:

为什么 java 嵌套接口不能是非静态的?为什么内部类不能包含静态非最终成员?

我在浏览 Gosling 时遇到了这些问题,但还没有找到答案。

【问题讨论】:

标签: java interface static final inner-classes


【解决方案1】:

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

【讨论】:

  • “内部类是一个嵌套类,它没有显式或隐式声明为静态的。[...] 成员接口(第 8.5 节)始终是隐式静态的,因此它们永远不会被视为内部类。 "引用java.sun.com/docs/books/jls/third_edition/html/classes.html
  • 所以没有内部类接口这种东西
  • @Zoltan:问题是为什么没有这样的东西?
【解决方案2】:

我不确定为什么内部类中不能有静态非最终成员,但是由于静态成员没有绑定到任何特定的对象实例,所以无论它是在内部类中还是在外部类中都没有区别。

例如

class OuterClass {

  private static int staticMember;

  class InnerClass {

    void incStatic() {
      staticMember++;
    }

  }

}

您可以从内部类访问静态成员,就好像它在内部类中一样。

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2010-09-09
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多