在接口中使用嵌套类很有用的地方?

时间:2015-08-26 06:26:11

标签: java interface nested-class

接口在哪种情况下可以嵌套类?

以下代码是允许且有效的。

public interface Iface {

    void show();

    class ifaceClass {
        int x;

        public ifaceClass() {
            System.out.println(x);
        }
    }
}

我也在努力创建类ifaceClass的对象。

编辑:

我能够制作像这样的对象

public class Test implements Iface {    

    public static void main(String[] args){
        ifaceClass  ifaceClassObj = new ifaceClass();
    }

    public void show() {    

    }
}

我注意到如果Test没有实现Iface,那么我需要关注导入,

import com.jls.Iface.ifaceClass;

但它归结为同样的问题,为什么不将它用作另一个类。

这种方法的差异或增值是什么?

2 个答案:

答案 0 :(得分:3)

您可以在实现ifaceClass的类中创建Iface的实例:

interface Iface {
    void show();
    class ifaceClass {
        int x;
        public ifaceClass() {
            System.out.println(x);
        }
    }
}

public class Test implements Iface {

    public static void main(String args[]) {
        ifaceClass iface = new ifaceClass();
    }

    @Override
    public void show() {
        // ...
    }
}

如果该类没有实现该接口,只需创建一个这样的实例:

Iface.ifaceClass iface = new Iface.ifaceClass();

为什么要在界面中创建一个类?基本上,出于同样的原因,您在另一个类中创建一个类,将相关的类组合在一起。

答案 1 :(得分:2)

  

在接口中使用嵌套类很有用吗?

没有这种情况可以 通过接口的内部类来实现。在接口中使用内部类是合法有效的,并且实现接口的类可以创建类的实例,除了Interface.Class之外,还可以使该类可访问,因为它根本不能是private

  

我注意到,如果Test没有实现Iface,那么我需要   跟随导入import com.jls.Iface.ifaceClass;

不一定,如果您的界面是可访问的,您的内部类将自动变为可访问。在这种情况下,您试图直接访问类而不导入interface以下语句需要上面的import语句。

ifaceClass  ifaceClassObj = new ifaceClass();
  

但它归结为同样的问题,为什么不将它用作公正   另一堂课。与此相加的差异或价值   方法

确切地说,创建另一个类也可以为您提供相同的工具,我在日常编程中从未见过任何用例,只能通过内部类接口来实现。除了可访问性之外,它没有提供任何其他功能。接口

我曾经使用过一次我认为非常糟糕的做法。有一天,我们需要在不同的类中实现一个通用方法,这些类正在实现接口说X,我们想添加一个额外的方法供所有这些类使用,以便在Object上添加一种检查只检查一些参数并返回boolean,即使该用例可以通过其他方式实现,但是特定的,它仅用于实现此接口的类,我们已添加了类在接口中,以便我们可以提供该方法来实现类。(注意:现在可以在这种情况下使用默认方法而不是内部类)

在这里,明智的是要注意,在大型项目中,任何人(除了创建者)都不可能注意到任何接口都有内部类。因此,在我们实现该类或手动检查接口之前,我们无法知道接口是否具有内部类。