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


Theoretical explanation of difference bw Interface and Abstract

我需要用一个例子从理论上解释接口类和抽象类之间的区别。

请不要回复任何代码,因为我已经知道了。我在设计水平上有所要求。

例如:我需要为汽车工业设计一个应用程序,他们生产汽车和自行车。

因此,汽车工业是母公司,汽车、自行车是从中继承的

我需要知道哪些功能应该放在接口中,哪些应该放在抽象类中。

通常,我喜欢把基类(抽象或其他)看作是什么,而接口就是做什么。所以VehicleAutomobile或诸如此类的东西,而它所做的是DrivableFlyable,等等。

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

您根本不应该在接口中放入任何功能;接口只不过是对实现它的任何类中应该定义的内容的定义。举个例子:你的类,比如bike、car、truck等,都应该有moveForward()、moveBackward(),turnRight()、turnLeft()和stop()的方法;但对于每种车型,这些功能的实现方式都会有所不同。。。您定义了车辆的接口,该接口指定必须定义所有这些方法,然后为特定车辆类型创建的每个类都必须实现所有这些方法。

当进行类型提示时,您可以指定车辆作为类型提示;那么任何接受vehicle类型参数的traffic类方法都知道,它们接受的类将具有可供调用的方法。

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

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

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

把抽象类想象成一种非常通用的东西,不应该实例化,因为这样做没有多大意义(例如,抽象类animal或shape,它们都是非常通用的,应该只扩展而不实例化(我知道这可能会因设计而异,但我只是想说明一点)。

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

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

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

这可能是一个有趣的开始。