gpt4 book ai didi

java - 接口(interface)内部的内部类

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:28:05 25 4
gpt4 key购买 nike

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

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

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();
}
}

最佳答案

您可以在接口(interface)中定义一个类。在接口(interface)内部,内部类隐式为public static

来自 JLS Section 9.1.4 :

The body of an interface may declare members of the interface, that is, fields (§9.3), methods (§9.4), classes (§9.5), and interfaces (§9.5).

来自 JLS Section 9.5 :

Interfaces may contain member type declarations (§8.5).

A member type declaration in an interface is implicitly static and public. It is permitted to redundantly specify either or both of these modifiers.

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

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

interface Hello {
class HelloInner {

}
}

将生成两个类文件:

Hello.class
Hello$HelloInner.class

关于java - 接口(interface)内部的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com