August 2021
Intermediate to advanced
450 pages
4h 46m
Chinese
如果抽象类和接口都提供抽象方法,那么两者真正的区别是什么?正如我们之前看到的一样,抽象类可以提供抽象方法,也可以提供实体方法,而接口只能提供抽象方法。为什么会有这样的区别呢?
假设我们想设计一个类代表一条狗,稍后还想添加更多的哺乳动物。那么逻辑上应该创建一个名为Mammal的抽象类:
该类拥有一个实体方法叫作generateHeat(),还有一个抽象方法叫做makeNoise()。generateHeat()是个实体方法,因为所有的哺乳动物有体温。而makeNoise()方法是抽象的,因为每个动物的叫声是不同的。
我们创建一个名为Head的类,用于组合关系中:
Head有两个方法:getSize()和setSize()。尽管组合不能清晰地阐明抽象类和接口之间的区别,但本例中使用组合可以说明在面向对象系统的整体设计中如何一起使用抽象类和接口。我认为这很重要,因为这是一个完整的示例。请记住有两种方式来构建对象关系:继承表示is-a关系,组合表示has-a关系。问题是,接口适合哪种关系?
为了回答该问题,并且引入多种对象关系,我们来创建一个名为Dog的类,该类是Mammal的子类,实现了Nameable接口,并且有一个Head对象(如图8.5所示)。
简单来说,Java和.NET中有三种方式构建对象:分别是继承、接口及组合。注意图8.5中的虚线代表了接口。该例子演示了如何使用这些方式,什么时候选择抽象类,什么时候选择接口以及什么时候选择组合。我们来进一步探索。 ...
Read now
Unlock full access