是否可以在抽象类中声明一个接口?我试过这个,我成功地做到了没有任何编译错误?在实际使用中,这有什么意义吗?
这是我写的代码。
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
{
}
答案 0 :(得分:2)
您可以在任何类中声明一个接口,而不仅仅是抽象。该接口隐式static
,因此您的封闭类只提供命名空间作用域,否则与接口无关。
这种效用肯定存在,我已经在很多场合使用过它。通常,接口耦合到同一类的方法,因此客户端可以将该接口的实现传递给该方法。
使用Java 8和功能接口类型,本地接口的扩散只会增加。
答案 1 :(得分:0)
是的,这是可能的。正如你所说 - 它编译(我想象运行),所以它是合法的 事实上,在接口或枚举中声明子接口是合法的(但只有公共接口,因为私有接口在接口中没有任何意义,就像私有方法一样)。
至于实际用途: 您可以在抽象类中声明一个私有内部类,并在所述抽象类的方法中使用它(我希望您能想到它的用法)。或者其中两个。如果您需要两者的共享合同 - 您可以使用界面。或者你需要返回一个在父类之外没有意义的特定事物。
一个更实际的例子是界面Map
及其子界面Map.Entry
。 Map
返回Entry
的一些方法,但没有Map
,条目无意义,因此不是独立的接口。如果Map
是一个抽象类而不是一个接口,那么你将完全具备你所描述的情况。