Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象类中与的接口_Java_Interface_Abstract Class_Inner Classes_Jls - Fatal编程技术网

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个)