Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 - Fatal编程技术网

Java 为什么要使用接口,而我们可以将所有方法抽象化?

Java 为什么要使用接口,而我们可以将所有方法抽象化?,java,Java,在抽象类中,我们可以将所有方法抽象,这样它就可以像接口一样工作,那么为什么要使用接口呢??我能想到的一个原因是我们可以实现多个接口,而不是扩展多个类。。是否涉及任何与设计或性能相关的问题???您已经得到了答案。使用接口,我们可以强制执行多种类型的行为,因为使用类对您不起作用。例如,您可以将类强制为IComparable和INumerable,但是如果您希望使用类来执行此操作,则这是不可能的 在设计方面,最好使用接口为您定义代码行为/契约/功能定义(请参见列表接口),并在您有一些可重用(通过继承)

在抽象类中,我们可以将所有方法抽象,这样它就可以像接口一样工作,那么为什么要使用接口呢??我能想到的一个原因是我们可以实现多个接口,而不是扩展多个类。。是否涉及任何与设计或性能相关的问题???

您已经得到了答案。使用接口,我们可以强制执行多种类型的行为,因为使用类对您不起作用。例如,您可以将类强制为IComparable和INumerable,但是如果您希望使用类来执行此操作,则这是不可能的

在设计方面,最好使用
接口
为您定义代码行为/契约/功能定义(请参见
列表
接口),并在您有一些可重用(通过继承)方法实现的地方使用
抽象


虽然使用all
abstract
方法是可能的,但在这种情况下,首选
接口

您已经确定了接口允许抽象类不允许的一件事。一个类不能扩展多个抽象类

是否涉及任何与设计或性能相关的事项

没有性能差异

您可能会认为抽象类(事实上,所有类)的单一继承限制使这成为“设计的东西”。当然,这将严重限制您在OO设计中使用多态性


(你也可以争辩说,当你没有接口时,你不能遵循“编程到接口”的准则。然而,这是一个薄弱的论点……一个术语上的诡辩。)

你自己回答了这个问题……写下这个问题作为答案,接受它,就完成了。如果除了抽象方法声明之外没有任何代码,那么抽象类应该是一个接口。对于接口,您不能做的是创建受保护的方法。接口方法总是公共的,因此接口定义了真正意义上的“接口”。