接口内部类

Nik*_*mar 3 java interface interface-implementation

我们可以在接口中拥有一个类,该类具有在其中实现的接口的不同方法吗?我在这里有一个疑问,为什么Java允许在接口内编写内部类以及我们可以在哪里使用它。

在下面的程序中,我在接口中编写了一个类并实现了接口的方法。在接口的实现类中,我刚刚调用了内部类方法。

public interface StrangeInterface
    {
      int a=10;int b=5;
      void add();
      void sub();
      class Inner
       {
         void add()
          {
             int c=a+b;
             System.out.println("After Addition:"+c);
          }
         void sub()
         {
             int c=a-b;
             System.out.println("After Subtraction:"+c);
         }
       }
    }   

 abstract public class StrangeInterfaceImpl implements I { 
      public static void main(String args[])
    {
       StrangInterface.Inner i=new StrangeInterface.Inner();
       i.add();
       i.sub();
    }
 }
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 5

您可以在接口内定义类。在接口内部,内部类是隐式的public static

\n\n

来自JLS 第 9.1.4 节

\n\n
\n

接口的主体可以声明接口的成员,即字段(\xc2\xa79.3)、方法(\xc2\xa79.4)、(\xc2\xa79.5)和接口(\xc2 \xa79.5)。

\n
\n\n

来自JLS 第 9.5 节

\n\n
\n

接口可以包含成员类型声明(\xc2\xa78.5)。

\n\n

接口中的成员类型声明是隐式 static 和 public 的。允许冗余地指定其中一个或两个修饰符。

\n
\n\n

就此而言,对接口或任何其他类中定义的内部类的唯一限制是,您必须使用封闭的成员名称来访问它们。
\n除此之外,它们之间没有关系。\xc2\xa0内部类编译后会产生完全不同的类文件。

\n\n

例如,如果您编译以下源文件:

\n\n
interface Hello {\n    class HelloInner {\n\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

将生成两个类文件:

\n\n
Hello.class\nHello$HelloInner.class\n
Run Code Online (Sandbox Code Playgroud)\n