我们都知道我们不能创建接口和抽象类的对象。但是为什么我们被允许在抽象类中使用构造函数而不在接口中?两者的对象都无法创建。我想要非常直接的回答不是很复杂的答案。
答案 0 :(得分:2)
接口(例如,至少在.NET和Java中)旨在专门用作它们的名称 - 以保证所有实现类中的某个接口(即(公共)成员集)。
接口不应该具有状态,甚至不应该定义类似初始状态的东西。如果没有初始状态,就不会为接口的构造函数留下任何合理的东西。
答案 1 :(得分:1)
接口只是一组必须由实现来完成的成员签名。为什么你不能定义构造函数? 因为构造函数是一个实现细节。
让我们说,当你想聘请某人时,你并不专注于谁是候选人而可以做什么候选人(这是一个简化)。您的候选人是否拥有所需的技术背景你的候选人能做团队合作吗从OOP的角度来看,您知道候选人必须履行什么才能与您合作。因此,我不关心候选人的母亲以及候选人何时/如何出生:我关心我可以接受哪些属性和行为今天。因此,您可以定义类似CanWorkOnMyCompany
的界面。
另一方面,抽象类是一个常规类,其中一些成员是签名,派生类必须为它们提供实现。也就是说,您无法实例化抽象类,因为它没有完全实现。
也许你可以说抽象类不能提供抽象成员,但它不是他们的目的。
答案 2 :(得分:0)
构造函数用于初始化新实例的状态。
抽象类可以定义状态,并且可以使用构造函数来初始化它。
接口无法定义任何状态,因此不需要构造函数。