接口在哪种情况下可以嵌套类?
以下代码是允许且有效的。
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;
但它归结为同样的问题,为什么不将它用作另一个类。
这种方法的差异或增值是什么?
答案 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
,即使该用例可以通过其他方式实现,但是特定的,它仅用于实现此接口的类,我们已添加了类在接口中,以便我们可以提供该方法来实现类。(注意:现在可以在这种情况下使用默认方法而不是内部类)
在这里,明智的是要注意,在大型项目中,任何人(除了创建者)都不可能注意到任何接口都有内部类。因此,在我们实现该类或手动检查接口之前,我们无法知道接口是否具有内部类。