【问题标题】:Interface Having inner class can affect abstraction of interface - OOP具有内部类的接口会影响接口的抽象 - OOP
【发布时间】:2014-11-14 10:43:51
【问题描述】:

接口提供 100% 的抽象,它具有没有实现的方法来实现抽象行为 但是这里我有一个例子迫使我思考接口的抽象能力。

我里面有接口和类,它有具体的方法,我可以在另一个类中访问该方法

示例:-

interface InnerInterFaceTest1 {
     class InnerClass {
        public  void doWork() {
            System.out.println("in interface innner class");
        }
    }
}
public class InnerInterFaceTest implements InnerInterFaceTest1 {
    public static void main(String... a) {
        InnerInterFaceTest1.InnerClass class1 = new InnerInterFaceTest1.InnerClass() ;
        class1.doWork();
    }
}

具有内部类的接口的概念是这样做的吗???或者那有什么意义??

【问题讨论】:

    标签: java oop interface inner-classes


    【解决方案1】:

    interface 内的类声明隐式为 static,因此它们是嵌套类但不是真正的内部类,即它们的实例不引用外部 interface 的实例。

    所以你有一个具体的class InnerInterFaceTest1.InnerClass,它与interface InnerInterFaceTest1 有一种命名空间关系,但是,抽象没有其他后果,特别是对于你的问题,interface 并没有变得不那么抽象由于该嵌套类的存在。例如,如果有人创建了一个顶级类并将其命名为 InnerInterFaceTest1_InnerClass,这将没有什么不同。

    【讨论】:

      【解决方案2】:

      JLS 定义嵌套类如下:

      嵌套类是其声明出现在另一个类或接口的主体中的任何类。

      请注意,在接口中声明的嵌套类隐式为 publicstatic

      所以这实际上不是一个内部类,而更像是一个封装或嵌套在另一个顶级类型中的顶级类。

      【讨论】:

        【解决方案3】:

        接口类通知java编译器把这个类当作接口, 因此,java 编译器在接口方法之前添加了 public 和 abstract 关键字,在数据成员之前添加了 public、static 和 final 关键字,仅此而已。

        所以,如果你在接口类中写子类和在类中写子类是一样的。

        根据这个理论,你可以为子类做所有你可以为普通类做的过程。

        【讨论】:

          【解决方案4】:

          这并不常见,但有时您需要指定要在接口中使用的结构,这些类可以具有例如一致性原语。见一个例子 https://stackoverflow.com/a/10481539/4054054

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-06-25
            • 2016-11-28
            • 2012-06-01
            • 1970-01-01
            • 2011-05-22
            • 2012-05-30
            • 1970-01-01
            相关资源
            最近更新 更多