【发布时间】:2015-02-28 09:50:04
【问题描述】:
【问题讨论】:
【问题讨论】:
看到这个article:
多重继承
一个类可以继承多个接口。
一个类只能继承一个抽象类。
默认实现
接口不能提供任何代码,只能提供签名。
抽象类可以提供完整的默认代码和/或仅提供必须覆盖的细节。
访问修饰符
接口不能有子类、函数、属性等的访问修饰符,一切都假定为公共抽象类可以包含子类、函数、属性的访问修饰符 核心 VS 外设
接口用于定义类的外围能力。换句话说,Human 和 Vehicle 都可以从 IMovable 接口继承。
抽象类定义了一个类的核心标识,并用于相同类型的对象。
同质化
如果各种实现只共享方法签名,那么最好使用接口。
如果各种实现是同类并使用共同的行为或状态,那么最好使用抽象类。
添加功能(版本控制)
如果我们向接口添加新方法,那么我们必须跟踪接口的所有实现并为新方法定义实现。
如果我们向抽象类添加新方法,那么我们可以选择提供默认实现,因此所有现有代码都可以正常工作。
字段和常量 接口中不能定义字段 抽象类可以定义字段和常量
【讨论】:
据我所知,抽象类已经可以实现一些方法或变量的值,只要它不实现它们all(这将使其成为正常的班级)。 接口无法做到这一点;它只能提供方法和变量存根。
【讨论】:
接口更像是一种契约——它详细说明了将在实现它的对象上找到哪些方法或属性。
抽象类是一个基础对象——它可以包含方法、变量和行为——但是你不能创建它的具体实现——你必须从它继承并扩展它的行为。
【讨论】: