Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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_Abstract Class - Fatal编程技术网

Java 如果不调用类抽象,我们可以从接口实现少数(不是全部)方法吗?

Java 如果不调用类抽象,我们可以从接口实现少数(不是全部)方法吗?,java,abstract-class,Java,Abstract Class,假设我们有一个包含10个方法的接口,但在一个类中只实现了其中的5个。那么这个类应该是抽象的。有没有办法在不抽象的情况下实现这样一个类?没有。实现不完整的类必须声明为抽象类。它不能直接实例化,但可以作为子类构建的公共基础 所有这些的要点是,编译器可以确保在对象上调用方法(由接口定义)时,该方法实际存在。这是Java强大类型化方法的一部分 Java确实有“可选方法”的概念,但这是相当非正式的:您必须提供一个抛出不支持的操作异常的虚拟实现。如果类实现了接口,它将保证接口中的所有方法都将实现。也就是说,

假设我们有一个包含10个方法的接口,但在一个类中只实现了其中的5个。那么这个类应该是抽象的。有没有办法在不抽象的情况下实现这样一个类?

没有。实现不完整的类必须声明为抽象类。它不能直接实例化,但可以作为子类构建的公共基础

所有这些的要点是,编译器可以确保在对象上调用方法(由接口定义)时,该方法实际存在。这是Java强大类型化方法的一部分


Java确实有“可选方法”的概念,但这是相当非正式的:您必须提供一个抛出不支持的操作异常的虚拟实现。

如果类实现了接口,它将保证接口中的所有方法都将实现。也就是说,如果您不想定义该方法的内容,则始终可以抛出UnsupportedOperationException:

public void cats(){
   throw new UnsupportedOperationException();
}

简言之,没有不声明在您实现的接口中定义的方法的方法。但是有一些方法可以解决这个问题,不管这些方法多么不正式。

您必须实现所有接口方法。如果您的类是抽象的,那么创建具体子类的人必须实现这些方法。

“但是,在不调用类抽象的情况下仍然存在”不是真的。为什么不直言不讳呢?顺便说一句,这不是我们编造的。它实际上与Iterator.remove()一起在API中使用(参见文档)。