关于Java:何时使用接口和何时使用抽象类

When to use Interface and when to use Abstract class

本问题已经有最佳答案,请猛点这里访问。

各位可以给我解释一下在什么情况下我应该使用接口,在什么情况下我应该更喜欢抽象类…?请记住,我不是在问接口和抽象类之间的区别。


如果发现任何是对象之间的关系,可以使用abstract。例如:Bird, Aeroplane, Paper Rocket这些都是可以飞行的,但是这些物体之间没有Is a relationship,所以你可以在这里使用Interface而不是abstract,因为鸟、飞机和纸火箭都是可以飞行的,但飞行方式不同。

当然,谷歌也有很多不同之处。


我建议遵守以下规则:

  • 仅在需要code-reuse时使用抽象类
  • 限制对定义抽象类的包的可见性

否则,请使用接口和委托。但是,正如软件设计一样,您必须针对每个具体情况做出正确的决定。如果您有必须应用但需要一些灵活性的限制/规则,那么考虑使用策略模式而不是继承。

抽象类的问题是不能从多个类继承。因此,如果您需要一个类型,其中AB类型的is都是抽象类,那么如何实现这一点呢?接口是开放的,可以由任何其他类型无限制地实现。


使用Abstract classwhen:您有一些通用的功能(方法),必须只在一个地方实现,其他具体的类只能使用它。

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


我们必须先推断。如果我们必须在那个类中编写一些通用的功能,那么只有这样,您才能使用抽象类。否则使用接口。因为我们可以实现接口的数量,但是我们只能扩展一个类,所以将来您必须使用接口而不是抽象类。