我们可以在界面中定义接口吗?

gir*_*iri 15 java interface

我想知道我们可以在界面中定义一个接口.喜欢

interface abc {
    void show();
    public interface xyz {
        void read();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是在采访中提出的问题.任何实时使用此.

Hot*_*ter 43

是的,我们可以做到.java中嵌套接口的定义如下:

嵌套接口是任何接口,其声明发生在另一个类或接口的主体内.顶级接口是不是嵌套接口的接口.

请参阅为多.

进一步 ...

一个原因可能是外部接口有一个将回调实现作为参数的方法.在这种情况下,嵌套接口是回调方法必须实现的契约.我没有理由在顶层声明回调接口.

public interface Processor {
   void execute(NotificationListener listener);

    interface NotificationListener {
        void processingCompleted();
    }  
}
Run Code Online (Sandbox Code Playgroud)

太阳网站关于这个主题的另一个好读物就在这里

特别要注意的是,在实现接口时,不需要实现嵌套在其中的任何接口.

  • @girinie我认为您应该接受HotTester的答案,但要实时使用它,请查看Map和Map.Entry.Map.Entry接口是Map协议的一部分(从Map.entrySet()返回时使用),因此它是Map接口的一部分.(写这篇文章时,HotTester在答案中添加了类似的信息,+ 1) (2认同)

小智 7

当然..查看java.util.Map接口的SOURCE CODE.Map接口包含一个嵌套的Entry接口.

有趣的是,在源代码中它简单地说

interface Entry <K,V> {
  ..
}
Run Code Online (Sandbox Code Playgroud)

但是javadoc说

public static interface Map.Entry<K,V>
Run Code Online (Sandbox Code Playgroud)

我想这是因为嵌套接口隐式"公共静态",即使源代码没有这么说.(但是接口内部的方法是公开的,并且不能是静态的,也就是说,接口中只允许实例方法).

-dbednar 2013-07-02


use*_*421 6

是.

您可以为自己测试一下,并在大约30秒内获得完全明确,无意见,无风险的答案.

可能永远等待论坛上可能不正确的回应是比较而不是理性的探究模式.

  • -1,你Squidwards,一个好的答案不仅说"是"或"不",还包括更多具体的信息,如利弊,用例和其他东西,可以由有经验的人获得.即使这个问题需要一个警告,请参阅接受的答案. (5认同)
  • +1问题提交者的这种懒惰对任何人都不利. (2认同)