-2

我需要一个例子来解释接口和抽象类之间的区别。

请不要回复任何代码,因为我已经知道了。我问的是设计水平。

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

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

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

4

4 回答 4

2

一般来说,我喜欢将基类(抽象或其他)看作是什么接口是什么。所以某事a Vehicleor an Automobileor some such,而它所做的是DrivableorFlyable等​​。

基类是存在的共同结构,而接口是预期功能的共同契约。

于 2013-06-30T10:49:52.910 回答
1

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

typehint时,可以指定vehicle作为typehint;那么任何接受车辆类型参数的交通类方法都知道他们接受的类将具有可供调用的那些方法。

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

于 2013-06-30T10:47:15.633 回答
1

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

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

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

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

于 2013-06-30T11:07:03.580 回答
0

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

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

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

于 2013-06-30T10:51:31.537 回答