Java 方法内部不允许使用接口

Java 方法内部不允许使用接口,java,methods,interface,scjp,Java,Methods,Interface,Scjp,我研究了一些OCPJP 7认证的书籍,在内部课程章节中有一些奇怪/不完整的信息。我曾尝试在方法内创建接口,但似乎无法做到这一点,只能在方法内创建类。你有什么理由不能这么做,或者只是缺少了一个功能 示例代码: public class Outer { public void method() { class C {} // allowed interface I {} // interface not allowed here } } 如果仔细阅读,您将看到: 不能在块内

我研究了一些OCPJP 7认证的书籍,在内部课程章节中有一些奇怪/不完整的信息。我曾尝试在方法内创建接口,但似乎无法做到这一点,只能在方法内创建类。你有什么理由不能这么做,或者只是缺少了一个功能

示例代码:

public class Outer {
  public void method() {
    class C {} // allowed
    interface I {} // interface not allowed here
  }
}
如果仔细阅读,您将看到:

不能在块内声明接口,因为接口本质上是静态的

这意味着,如果您有一个接口,比如:

public class MyClass {
   interface MyInterface {
       public void test();
   }
}
你会做到的

MyClass.MyInterface something = new MyClass.MyInterface() {
    public void test () { .. }
};
因为
MyInterface
将显式地
static
。绑定到封闭类的实例是没有意义的,因为它只提供了一些抽象,而不必绑定到封闭类的特定实例或状态


同样的事情也发生在接口嵌套在方法中的情况下。方法中的任何内容都不能(显式地)是静态的(因为非静态方法与enlosing类的特定实例相关联),因此不能有本地接口。

它有什么用途?我不关心用途,我只关心原因,因为我想了解OCPJP考试问题背后的逻辑。OCPJP考试问题背后的逻辑?-祝你好运。也许这是一种误解,但从我迄今为止所看到的情况来看,这些问题似乎是围绕着(事实上)将以不同方式解决的场景构建的——并且只是为了防止出现相应的问题。在真正的代码中,您永远不应该怀疑
a++=--a+a++是。(这并不是说这个问题不有趣或不相关)@Marco13呵呵,我只是想尽可能多地涵盖,我不会试图理解WTFs的结构,我只是想理解逻辑问题背后的逻辑:)@molbdnilo我不明白为什么我们不被允许这样做。我知道答案是因为接口是隐式静态的,但为什么它们必须是静态的呢?也许我想在
方法中定义多个
I
实现。现在我可以了,但我必须在
方法
之外定义
I
。为什么如果
I
完全在
方法中定义和使用,我应该在
方法
之外定义
I
。定义尽可能接近其使用位置的内容似乎是一种很好的做法。谢谢kocko,我将学习Java教程,那里似乎有一些隐藏的宝石。:)