Java 抽象类中与的接口
是否可以在抽象类中声明接口?。我试过了,我成功地做到了,没有任何编译错误??在实际使用中,这有什么意义吗 这是我写的代码Java 抽象类中与的接口,java,interface,abstract-class,inner-classes,jls,Java,Interface,Abstract Class,Inner Classes,Jls,是否可以在抽象类中声明接口?。我试过了,我成功地做到了,没有任何编译错误??在实际使用中,这有什么意义吗 这是我写的代码 public abstract class X { public interface abc extends I1 { public void sum(int i,int j); } } public class Impl extends X { class InnerImpl implements abc {
public abstract class X
{
public interface abc extends I1
{
public void sum(int i,int j);
}
}
public class Impl extends X
{
class InnerImpl implements abc
{
@Override
public int sum(int i, int j)
{
return i+j;
}
}
}
public interface I1
{
}
您可以在任何类中声明接口,而不仅仅是抽象类。接口是隐式的
静态的
,因此您的封闭类只是提供了一个名称空间范围,在其他方面与接口无关
它的实用性确实存在,我已经在很多场合使用过它。通常,接口耦合到同一类的方法,因此客户端可以将该接口的实现传递给该方法
有了Java 8和功能接口类型,本地接口的数量只会增加。是的,这是可能的。正如你所说的,它是编译的(我想象是运行的),所以它是合法的。
事实上,在接口或枚举中声明子接口是合法的(但只声明公共接口,因为私有接口在接口中没有任何意义,就像私有方法一样) 至于实际用途: 您可以在抽象类中声明一个私有的内部类,并在所述抽象类的方法中使用它(我希望您能想到它的用法)。或者其中的两个。如果两者都需要共享合同,那么可以使用接口。或者,您需要返回在父类之外没有意义的特定内容
一个更实际的例子是接口
Map
及其子接口Map.Entry
。一些Map
返回和Entry
的方法,但是如果没有Map
,条目是没有意义的,因此不是一个独立的界面。如果Map
是一个抽象类,而不是一个接口,那么您将拥有与您描述的完全相同的情况。显然,当您没有遇到编译错误时,这是可能的。这很酷,但您不能在公共类中拥有公共接口,可以吗?为什么不可以?当然可以。我认为公共接口必须在它自己的类似文件的公共类中(不能在同一个文件中有2个)