【问题标题】:Where it is useful to have nested classes in an interface? [duplicate]在接口中嵌套类在哪里有用? [复制]
【发布时间】:2015-11-20 01:35:53
【问题描述】:

接口在什么场景下可以嵌套类?

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

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;

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

这种方法有什么区别或增值?

【问题讨论】:

  • 当你想确保实现你的接口的类可以访问具有特定实现的类时。
  • 你的意思是它在哪里有用?一个接口可以总是有嵌套类...
  • 我建议您将问题编辑为实际上然后再问。
  • @SubodhJoshi 链接帮助。我的问题还要求让我知道如何调用类方法。

标签: java interface nested-class


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    在接口中有嵌套类有什么用处?

    没有这种情况只能用接口的inner class来实现。在接口中有内部类在语法上是有效的,对于实现接口的类可以创建类的实例,除此之外Interface.Class 还可以使该类可访问,因为它根本不能是private

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

    不一定,如果您的接口可访问,您的内部类将自动变得可访问。在这里您尝试直接访问类,甚至不导入interface,在这种情况下,下面的语句需要上面的导入语句。

    ifaceClass  ifaceClassObj = new ifaceClass();
    

    但归结为同样的问题,为什么不将其用作公正 另一个班级。与此有什么区别或增值 接近

    确实,创建另一个类也可以为您提供相同的功能,我在日常编程中从未见过任何只能通过内部接口类实现的用例。它除了通过界面。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 2013-10-26
      • 2015-12-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多