接口和抽象类的区别
txt人生重要的不是所站的位置,而是所朝的方向
不要用自己的需求去衡量别人的给予,否则永远是抱怨
1 相同点 都不能被直接实例化,都可以通过继承实现其抽象方法
都是面向抽象编程的技术基础,实现了诸多的设计模式
2 不同点 接口支持多继承;抽象类不能实现多继承
接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员
接口是一组行为规范;抽象类是一个不完全的类,着重族的概念
接口可以用于支持回调;抽象类不能实现回调,因为继承不支持
接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法
接口可以作用于值类型和引用类型;抽象类只能作用于引用类型
例如,Struct就可以继承接口,而不能继承类
通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略
在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示,除了我的一些积累之外,很多都来源于经典,我相信经得起考验
所以在规则与场合中,我们学习这些经典,最重要的是学以致用,当然我将以一家之言博大家之笑,看官请继续
3 规则与场合 请记住,面向对象思想的一个最重要的原则就是:面向接口编程
借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程
抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能
接口着重于 CAN-DO关系类型,而抽象类则偏重于 IS-A式的关系; 接口多定义对象的行为;抽象类多定义对象的属性; 接口定义可以使用 public、protected、internal 和 private修饰符,但是几乎所有的接口都定义为 public,原因就不必多说了
“接口不变”,是应该考虑的重要因素