首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内接口内部类

内接口内部类
EN

Stack Overflow用户
提问于 2013-08-19 18:30:47
回答 4查看 4.1K关注 0票数 3

我们能不能在一个接口中有一个类,它有不同的接口实现方法。我对Java为什么允许在接口中编写内部类以及在哪里使用它有疑问。

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

代码语言:javascript
复制
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();
    }
 }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-19 18:39:01

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

来自JLS第9.1.4节

接口的主体可以声明接口的成员,即字段(§9.3)、方法(§9.4)、 (§9.5)和接口(§9.5)。

来自JLS第9.5节

接口可能包含成员类型声明(§8.5)。 接口中的成员类型声明是隐式静态和公共。允许冗余指定这两种修饰符中的一种或两种。

对接口或任何其他类中定义的内部类的唯一限制是,您必须使用封闭的成员名来访问它们。

除此之外,它们之间没有任何关系,内部类在编译后会产生完全不同的类文件。

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

代码语言:javascript
复制
interface Hello {
    class HelloInner {

    }
}

将生成两个类文件:

代码语言:javascript
复制
Hello.class
Hello$HelloInner.class
票数 5
EN

Stack Overflow用户

发布于 2013-08-19 18:37:48

代码语言:javascript
复制
Can we have a class inside an interface which has different methods of the interface implemented in it.

IMHO,但接口不是为此目的而设的。

如果在class中编写内部interface,则始终是public and static.

它相当于

代码语言:javascript
复制
public interface StrangeInterface
    {
 public static class Inner{

}

interface中的变量也显式地public static variables

票数 2
EN

Stack Overflow用户

发布于 2013-08-19 18:43:22

接口可以将自己的实现作为默认实现提供。

注意,除非您将内部类implements声明为接口,否则除了内部类之外,这两个类之间没有任何关系。当类与接口紧密相关时,这并不是本质上不合理的,尽管我会怀疑它是一种普遍有用的模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18320615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档