为什么我们使用抽象类和接口? Class,Abstarct类和接口

时间:2016-05-02 05:05:24

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

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

任何人都可以告诉我

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

当我们使用这个时?

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

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

界面是完全可以接受的,当我们想强制实现所有方法时,我们使用接口但是为什么是抽象类?强制执行只是一个区别?

提前感谢。

2 个答案:

答案 0 :(得分:2)

这里精美解释 - 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. 如果要在组件的所有实现中提供通用的实现功能,请使用抽象类。抽象类允许您部分实现您的类,而接口不包含任何成员的实现。

答案 1 :(得分:1)

考虑一下。

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

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