Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_User Interface_Polymorphism_Abstract Class - Fatal编程技术网

Java 何时使用接口和何时使用抽象类

Java 何时使用接口和何时使用抽象类,java,user-interface,polymorphism,abstract-class,Java,User Interface,Polymorphism,Abstract Class,各位,你们能告诉我在什么情况下我应该使用接口,在什么情况下我应该更喜欢抽象类?请记住,我并不是在问接口和抽象类之间的区别。使用抽象类当:您有一些公共功能(方法),它们必须在一个地方实现,而其他具体类可以使用它 当:没有通用功能时,使用界面。每个具体类都有自己的功能实现。我建议遵循以下规则: 如果需要代码重用 限制定义抽象类的包的可见性 否则,请使用接口和委托。但正如软件设计一样,你必须为每一个具体情况做出正确的决定。如果您有必须应用的限制/规则,但需要一些灵活性,请考虑优先使用策略模式而不是

各位,你们能告诉我在什么情况下我应该使用接口,在什么情况下我应该更喜欢抽象类?请记住,我并不是在问接口和抽象类之间的区别。

使用
抽象类
当:您有一些公共功能(方法),它们必须在一个地方实现,而其他具体类可以使用它


当:没有通用功能时,使用
界面
。每个具体类都有自己的功能实现。

我建议遵循以下规则:

  • 如果需要
    代码重用
  • 限制定义抽象类的包的可见性
否则,请使用接口和委托。但正如软件设计一样,你必须为每一个具体情况做出正确的决定。如果您有必须应用的限制/规则,但需要一些灵活性,请考虑优先使用策略模式而不是继承


抽象类的问题在于不能从多个抽象类继承。因此,如果您需要一个
a
B
类型的
类型,并且两者都是抽象类,那么如何实现呢?接口是开放的,可以由任何其他类型无限制地实现。

我们必须首先选择inferface。若我们必须在那个类中编写一些公共功能,那个么只有这样你们才能使用抽象类。否则使用接口。因为我们可以实现许多接口,但我们只能扩展一个类,所以将来您必须使用接口而不是抽象类

如果您发现对象之间存在任何关系,则可以使用
abstract
例如:
鸟、飞机、纸火箭
这些都是可以飞行的,但是这些对象之间没有任何关系
,因此您可以在这里使用
接口
而不是
抽象
, 因为鸟、飞机和纸火箭都可以飞行,但飞行方式不同


Google上当然有很多不同之处。

关于这个问题,我想说“支持协作而不是继承”,这几乎可以解释为不需要抽象类……抽象类在很多情况下都很有用。。。你必须了解哪种情况最能回答需要解决的问题。继承还有其他用途,而不是共享公共代码。请解释我,这样我会得到更多的澄清,其他的链接。。。