我有一个非常基本的问题:
我们什么时候应该决定为特定类使用Interface或Class?
例如:说我们有2个班,顾客和博士。
在继承(类)中:我们可以将这两个类设置为从父类Person继承。
我们不能对Interface做同样的事吗?说我们有InterfacePerson并且Customer和Doctor都实现了接口吗?
因此,这导致:我们何时决定使用一个而不是另一个,反之亦然?
答案 0 :(得分:14)
阅读一本书,然后再阅读有关OOP的章节
在您的示例中,Person
应该是一个类,因为它包含Doctor
和Customer
共有的实现详细信息
接口没有(也不需要)实现细节 - 它们只表示实现它们的对象正在做什么。不是如何。为什么这有用?因为当你使用这个对象时,你不关心 它将如何完成它的工作。
让我们看一个简单的例子 - 有一个接口Comparable
(至少在Java中)。它表示它的实现者可以相互比较。所以你可以有两个类:
class Doctor implements Comparable {..}
class Customer implements Comparable {..}
现在,您可以使用通用方法,该方法使用实现Comparable
并调用comparable1.compareTo(comparable2)
的任意对象,因为您知道他们可以进行比较 - 它的由他们的界面表示。
答案 1 :(得分:10)
扩展另一个类的类继承了该行为。另一方面,实现一个接口只是说它需要表现那样,但是类仍然必须知道如何操作。
除了单继承限制之外,使用接口的代码更容易重构和测试,例如在单元测试中为数据库访问对象提供模拟实现。
所以,真正的答案是,这取决于你的设计。
可能是您使用接口来描述行为,并使用抽象父类来实现子类可以继承的行为。或者子类是如此不同,每个子类都以自己的方式实现接口。
答案 2 :(得分:9)
接口用于强制执行某些方法/属性。简而言之,界面是一套规则。
可以使用类继承/覆盖基本功能。
看看
答案 3 :(得分:2)
首先要记住的是,可以实例化类,接口不能。
其次,一个Class只能扩展一个Class。接口不受此限制,因此我们可以有多个继承,如此
public class foo extends Person implements Man, Mammal
foo是一个人。它也是一个男人和一个哺乳动物;
唯一的问题是接口不能有变量或方法实现,作为一个类(或那个问题的抽象类)可以。
一般来说,如果可以,我会坚持使用接口并避免使用抽象类。
答案 4 :(得分:2)
在对象建模中,不应该为人及其角色使用继承。应该用两个相关对象对它们进行建模。也就是说,使用组合而不是继承。
所以在某种程度上,有三种选择,你讨论两个错误的方法:继承和接口,用于建模方和角色。
类是一组对象的模板。这些对象具有行为,(通常)具有状态和特征。关于行为,每个对象都有一个(隐式)接口 已经:可以在外部调用的方法集。
接下来的问题是,为什么要创建一个名为的接口,这是接口已经提供的接口的一个子集?
答案 5 :(得分:1)
简单地说,当涉及代码/实现时使用类,而当它只是接口描述时使用接口。在引用代码中的对象时,更喜欢引用接口,因为它可以更容易地替换实际的实现(或者添加更多不同的实现)。
是的,Docor和Customer / Patient都可能实施或扩展Person。
答案 6 :(得分:1)
父类是具有其所有子类共有的最小属性的类。
但是Interface是一个契约,它告诉它的植入提供它是否不是一个抽象类。
类和接口之间的一个重要区别是
类继承将给出两个公共子类之间的关系。
接口实现在两个不常见的类之间给出关系。
答案 7 :(得分:0)
在C#中,只能通过Interface获得多重继承。 根据您的业务需求,如果您的类需要多继承fwd,那么使用Interface else使用class。
同样,接口的所有成员都应该在类中给出定义,即接口成员是必须实现的成员。
答案 8 :(得分:0)
类表明继承基类的对象是某种类
如果使用界面,则只显示您的类具有界面描述的一些常见行为
答案 9 :(得分:0)
将界面视为合同。该类可以提交合同(实现接口)
假设您有类具有子类医生和患者的人员。然后,您将使用由患者实施的方法getSymptoms()和使用Doctor实施的界面治疗(可治疗)的界面处理。最有可能治愈(可治疗)会在某个时候调用getSymptoms()......