类与接口
我有一个非常基本的问题:
我们什么时候应该决定对特定类使用接口或类?
例如:假设我们有2个类,客户和医生。
在继承(类)中:我们可以将这 2 个类设置为从父类 Person 继承。
难道我们不能对界面做同样的事情吗?说我们有 InterfacePerson,并且客户和医生都实现了这个接口?
因此,这导致:我们何时决定使用一个而不是另一个,反之亦然?
我有一个非常基本的问题:
我们什么时候应该决定对特定类使用接口或类?
例如:假设我们有2个类,客户和医生。
在继承(类)中:我们可以将这 2 个类设置为从父类 Person 继承。
难道我们不能对界面做同样的事情吗?说我们有 InterfacePerson,并且客户和医生都实现了这个接口?
因此,这导致:我们何时决定使用一个而不是另一个,反之亦然?
阅读维基百科文章
读一本书,然后再次阅读有关 OOP 的章节
在您的示例中,应该是一个类,因为它包含 a 和 .Person
Doctor
Customer
接口没有(也不需要)实现细节 - 它们只表示实现它们的对象正在做什么。不是怎么回事。为什么这很有用?因为当你使用对象时,你并不关心它将如何完成它的工作。
让我们看一个简单的例子 - 有一个接口(至少在Java中)。它表示其实现者可以相互比较。因此,您可以有两个类:Comparable
class Doctor implements Comparable {..}
class Customer implements Comparable {..}
现在,您可以拥有一个通用方法,该方法采用实现和调用的任何一组对象,因为您知道它们可以执行比较 - 它由它们的接口表示。Comparable
comparable1.compareTo(comparable2)
扩展另一个类的类将继承该行为。另一方面,实现一个接口只是说它需要以这种方式运行,但类仍然必须知道操作方法。
除了单个继承限制之外,使用接口的代码更容易重构和测试,例如,在单元测试中为数据库访问对象提供模拟实现。
所以,真正的答案是,这取决于你的设计。
可能是使用接口来描述行为,并使用抽象父类来实现可由子类继承的行为。或者,也许子类是如此不同,以至于每个子类都以自己的方式实现接口。