【问题标题】:Why we use abstract class and interface ? Difference between Class, Abstarct Class and Interface为什么我们使用抽象类和接口?类、抽象类和接口的区别
【发布时间】:2016-05-02 05:05:24
【问题描述】:

我知道这是一个非常重复的问题,我也阅读了大部分帖子,但没有找到满意的答案。我知道我从大多数帖子中读到的书本差异。

谁能告诉我

我们为什么要使用抽象类和接口?

我们什么时候用这个?

我知道当我们有一些重复的任务但每次都以不同的方式实现时,我们会使用抽象类。

我认为我们可以通过普通类和子类使用覆盖然后我们为什么使用抽象?他们也是抽象类和接口之间访问说明符的区别以及强制在接口中实现

接口是完全可以接受的,当我们想强制实现所有方法在那种情况下我们使用接口但是为什么要抽象类?强制实现只是一个区别?

提前致谢。

【问题讨论】:

  • 在我看来:接口就是契约;抽象类是模板。我有时会使用both:一个接口和一个实现它的抽象类。这样开发人员可以选择使用我的基本功能或用他们自己的覆盖。

标签: php class oop abstract-class php-5.3


【解决方案1】:

这里有很好的解释 - https://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface

简而言之,

接口用于定义类的外围能力。换句话说,Human 和 Vehicle 都可以从 IMovable 接口继承。

抽象类定义了一个类的核心标识,并用于相同类型的对象。

也可以看看https://msdn.microsoft.com/en-us/library/scsyfw1d(v=vs.71).aspx

这里有一些建议可以帮助您决定是使用接口还是抽象类来为组件提供多态性。

  1. 如果您希望创建组件的多个版本,请创建一个抽象类。抽象类提供了一种简单易行的方式来对组件进行版本控制。通过更新基类,所有继承类都会随着更改而自动更新。另一方面,接口一旦创建就不能更改。如果需要新版本的界面,您必须创建一个全新的界面。

  2. 如果您正在创建的功能对各种不同的对象都很有用,请使用接口。抽象类应该主要用于密切相关的对象,而接口最适合为不相关的类提供通用功能。

  3. 如果您要设计小而简洁的功能,请使用接口。如果您正在设计大型功能单元,请使用抽象类。

  4. 如果您想在组件的所有实现中提供通用的已实现功能,请使用抽象类。抽象类允许您部分实现您的类,而接口不包含任何成员的实现。

【讨论】:

    【解决方案2】:

    考虑一下。

    接口没有实现。它将原型强制到一个类中,但无助于实现它们。

    接口不依赖于类层次结构。您可以将相同的接口应用于多个完全不同的类树。这很重要,也是接口在抽象类上提供的东西之一。接口是独立于实现的,您可以将其“贴在”任何类上。这是界面最强大的方面。

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2010-11-13
      • 2013-02-17
      • 2018-10-11
      相关资源
      最近更新 更多