界面与摘要差异的理论解释

时间:2013-06-30 10:44:06

标签: php design-patterns

我需要通过一个例子对Interface和Abstract类之间的差异进行理论解释。

请不要回复我已经知道的任何代码。我在设计层面问。

对于Eg:我需要为他们制造汽车和自行车的汽车行业设计一个应用程序。

所以这里的AutomobileIndustry是父类,而Car,Bike则继承它。

我需要知道应该在Interface中添加哪些功能以及Abstract class中应该包含哪些功能。

4 个答案:

答案 0 :(得分:2)

一般来说,我喜欢将基类(抽象或其他)视为 的内容,而界面是所做的。所以某些 VehicleAutomobile或某些内容,而所做的Drivable或{{1}等等。

基类是存在的常见结构,而接口是预期功能的通用契约。

答案 1 :(得分:1)

您不应将任何功能添加到界面中;接口只不过是在任何实现它的类中定义的定义。 作为一个例子:你的类,如自行车,汽车,卡车等都应该有moveForward(),moveBackward(),turnRight(),turnLeft()和stop();但是对于每种车型,这些都是不同的......你定义了一个车辆界面,指定必须定义所有这些方法,然后为特定车辆类型创建的每个类必须实现所有这些方法。

当键入时,您可以将车辆指定为typehint;那么接受类型为vehicle的参数的任何流量类方法都知道他们接受的类将具有可供它调用的那些方法。

一个抽象包含可从其继承的所有子类可用的常用方法和属性,因此您不需要在每个子类中重新定义那些相同的代码块,而是使用继承以便它们只是在一个地方定义。请注意,抽象无法实例化,因此它只能用作其他类定义的父级。

答案 2 :(得分:1)

值得补充的是,一个类可以实现多个接口,但它只能扩展一个类(抽象或具体)。

另一个区别是抽象类可以包含实体变量和方法,而接口不能(接口只能有没有主体的方法)。

将抽象类视为一种非常通用的东西,不应该被实例化,因为它实际上没有多大意义(例如抽象类动物或形状,两者都非常通用,应该是只是扩展而不是实例化(我知道这可能因设计而异,但我只是想说明一点))。

接口只是保证实现它的类已经实现了接口中定义的所有方法。

答案 3 :(得分:0)

接口中的所有方法都应该由实现它的类实现。接口包含实现类应执行的操作。

抽象类中的方法可用于所有派生类。如果存在可以派生多个类的泛型类,则应该使用抽象类。例如,Animal类可以是抽象的,使用抽象方法,所有派生类 - Tiger,Bear,Dolphin - 都可以选择实现与否。

This can be an interesting start.