我们能不能在一个接口中有一个类,它有不同的接口实现方法。我对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();
}
}发布于 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)。 接口中的成员类型声明是隐式静态和公共。允许冗余指定这两种修饰符中的一种或两种。
对接口或任何其他类中定义的内部类的唯一限制是,您必须使用封闭的成员名来访问它们。
除此之外,它们之间没有任何关系,内部类在编译后会产生完全不同的类文件。
例如,如果您编译了以下源文件:
interface Hello {
class HelloInner {
}
}将生成两个类文件:
Hello.class
Hello$HelloInner.class发布于 2013-08-19 18:37:48
Can we have a class inside an interface which has different methods of the interface implemented in it.IMHO,但接口不是为此目的而设的。
如果在class中编写内部interface,则始终是public and static.。
它相当于
public interface StrangeInterface
{
public static class Inner{
}interface中的变量也显式地public static variables。
发布于 2013-08-19 18:43:22
接口可以将自己的实现作为默认实现提供。
注意,除非您将内部类implements声明为接口,否则除了内部类之外,这两个类之间没有任何关系。当类与接口紧密相关时,这并不是本质上不合理的,尽管我会怀疑它是一种普遍有用的模式。
https://stackoverflow.com/questions/18320615
复制相似问题