【发布时间】:2017-06-04 03:18:18
【问题描述】:
我们都知道不能同时创建接口和抽象类的对象,但是为什么抽象类可以有构造函数,接口不能有构造函数呢?无法创建两者的对象。我想要非常直接的答案而不是非常复杂的答案。
【问题讨论】:
标签: oop constructor interface abstract-class
我们都知道不能同时创建接口和抽象类的对象,但是为什么抽象类可以有构造函数,接口不能有构造函数呢?无法创建两者的对象。我想要非常直接的答案而不是非常复杂的答案。
【问题讨论】:
标签: oop constructor interface abstract-class
构造函数用于初始化新实例的状态。
抽象类可以定义状态并且可以有构造函数来初始化它。
接口不能定义任何状态,因此不需要构造函数。
【讨论】:
接口只是一组必须由实现实现的成员签名。为什么不能定义构造函数? 因为构造函数是一个实现细节。
假设当您想雇用某人时,您的重点不是候选人是谁,而是候选人能做什么(这是一种简化)。您的候选人是否拥有所需的技术背景?你的候选人可以进行团队合作吗?从 OOP 的角度来看,您知道候选人必须满足什么才能与您合作。因此,我不关心候选人的母亲以及候选人的出生时间/方式:我关心今天我可以接受哪些属性和行为。因此,您将为此定义一个类似CanWorkOnMyCompany 的接口。
另一方面,抽象类是一个常规类,其中一些成员是签名,派生类必须为它们提供实现。也就是说,你不能实例化一个抽象类,因为它没有完全实现。
您可能会争辩说抽象类不能提供抽象成员,但这不是他们的目的。
【讨论】:
接口(例如,至少在 .NET 和 Java 中)旨在专门用作它们的名称 - 以保证所有实现类中的某个接口(即(公共)成员集)。
接口不应该有状态,甚至不应该定义像初始状态这样的东西。如果没有初始状态,接口的构造函数将无法完成任何合理的操作。
【讨论】: