我已经在stackoverflow上看到很多答案,但我没有找到与我的匹配的答案。 除了所有这些差异,如果我们说一个抽象类抽象行为的实现,而一个接口抽象实现行为的类型,是否有意义。抽象类与设计点的接口有什么不同?
回答
从设计的角度来看,主要区别是:
- 你可以声明在实现类的构造函数合同,通过建立在抽象基类中的受保护的构造。
- 您可以通过基类
- 可以使合同周围的包装提供的可用方法的实现(例如验证方法参数)
- 你可以提供一个“呼叫计划”当您创建调用非抽象方法类型的抽象方法,由派生类实现。这对实现派生类中的算法抽象很有用,而基类实现所有处理逻辑 - 准备和验证数据,并让实际处理算法由派生类实现。
所以,我要说你是在该语句正确“的抽象类抽象行为的实现,而一个接口抽象它实现了行为的类型”
抽象类:提供必须实施一些方法(你覆盖抽象类的方法)
接口:只定义了一个合同。表明实现该接口具有的接口方法的类(你实现一个接口)
例如:通过实现对现有类的接口
,你只需要声明添加界面方法到班级的合同。该类可能已经实现了该接口的所有方法,并且不需要更改现有类中的任何内容。
通过将基本类型更改为抽象类,即使与类型的抽象方法具有相同名称的方法已存在,也需要覆盖所有方法。
不是真的不行,因为抽象类不需要实现任何行为。它可能应该,因为否则你可能会争论它的用处,但它不必须。
通常,抽象类实现了一些行为,但留下了一些专门的行为未实现。
例如,您可能会编写一个实现网络应用程序服务器的类,但不会实现流程函数,而是将其留给继承类来实现。
class MyServer(Networkserver):
// process() is called whenever a client has sent a request
function process(data):
...
通过使类抽象,因此无法被实例化,对于专业化函数不必有某些适当的“默认”行为。
接口=纯抽象类(没有实现抽象类)
单纯从设计的角度,并且是语言无关,接口在类和客户之间的合同,承诺它做什么,不是它是如何做到的。这是“编程接口”口头禅中暗示的用法。
由于像C++这样的语言没有接口,抽象类是表示它的唯一方法。对于其中接口是第一类构造的语言,任何一种方式都是可以接受的,并且在选择中有折衷。当然,语言之间在实现上存在其他技术差异,但我不相信你会问到这些。
有an interview with Erich Gamma,其中他讨论了一些差异。
要回答你的问题,我认为从理论的角度来看是有道理的。从实用的角度来看,它可能取决于你是编程中的语言:)
我一直在寻找一个答案,支持我的论点“不同层次(家庭)的对象可以实现相同的接口,但他们不能有相同的抽象基类“。所以我相信“抽象类抽象行为的实现,而接口抽象实现行为的类型” – somaraj 2010-04-12 08:41:29
两个有特定用途按语言设计 - 抽象类被设计为一个基类,不能被实例化。 wheras当u只是需要定义一个合同(没有实现),每个实现类必须thrie自己的方式跟随,则u必须使用interfaces.Also -
可以是一个基类继承
抽象类 - 是的接口 - 无
能有impelementation
抽象类 - 有接口-No
- 1. C#中的抽象类和接口类有什么不同?
- 2. 类层次结构设计 - 接口+基类与抽象类
- 3. 实现与抽象类的接口时声明什么(不)?
- 4. 抽象类MouseAdapter与接口
- 5. 100%抽象类与接口
- 6. 接口与抽象类
- 7. 为什么使用接口而不是抽象类与DI?
- 8. 为什么接口或抽象类有用? (或为什么?)
- 9. 为什么在接口为什么不能在抽象类
- 10. 接口和抽象类的优点是什么?
- 11. 接口优于抽象类的优点是什么?
- 12. 抽象类与代表族的接口
- 13. 接口与抽象类同义,不带植入w.r.t.固体?
- 14. 为什么任何一种抽象都使用接口而不是抽象类?
- 15. 设计与接口的类
- 16. 抽象类难点:继承从接口
- 17. 什么时候去接口,什么时候去抽象类
- 18. 为什么我们有抽象类时需要接口?
- 19. 抽象类和接口之间有什么区别?
- 20. 为什么HttpContext是一个抽象类而不是接口?
- 21. 为什么java.sql.Statement是一个接口而不是抽象类?
- 22. 这是设计一个好主意 - 接口和抽象类
- 23. 空白接口与普通接口有什么不同?
- 24. 抽象类或SoftDelete接口
- 25. 抽象类V/s接口
- 26. 纯抽象类和接口
- 27. 接口vs 100%抽象类
- 28. PHP抽象类和接口
- 29. 接口或抽象类
- 30. 抽象类和接口
不仅仅是说抽象类可以有实现和接口不能,类可以有很多接口并且只能有一个抽象基类,我觉得不同层次(家庭)的对象可以实现相同的接口,但它们不能具有相同的抽象基类。这就是为什么我相信,“一个抽象类抽象行为的实现,而一个接口抽象实现行为的类型” – somaraj 2010-04-12 08:39:12