封装的优点
良好的封装能够减少耦合。
类内部的实现可以自由地修改。
类具有清晰的对外接口。
继承
子类拥有父类非private的属性和功能。
子类具有自己的属性和功能(扩展)。
子类可以以自己的方式实现父类的功能(重写)。
注:C#中子类可以继承父类的方法、域、属性、事件和索引器。
继承的优点
共享代码、避免重复。
使得修改或扩展继承而来的实现都较为容易。
继承的缺点
父类变,子类不得不变。
继承会破坏封装,父类的实现细节会暴露给子类。
多态
子类以父类的身份出现。
子类在工作时以自己的方式来实现。
子类以父类的身份出现时,子类特有的属性和方法不可以使用。
注:C#中存在虚拟方法,虚拟属性,虚拟事件和虚拟索引器的概念,但不存在虚拟字段的概念。
抽象类
抽象类不能被实例化。
抽象方法必须被子类重写。
如果类中包含抽象方法,那么类就必须定义为抽象类。
接口
接口不能被实例化,不能有构造方法和字段。
不能有修饰符。
接口中不能包含虚拟的或者静态的成员。
接口可以包含方法、属性、事件和索引器。
实现接口的类,必须实现接口中的所有方法和属性。
抽象类和接口的区别
抽象类可以包含一些成员的实现,接口却不能包含成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现。
一个类只能继承一个抽象类,但可以实现多个接口。
类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。
如果行为跨越不同类的对象,可以使用接口;对于一些相似的类对象,可以使用继承抽象类。
抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类;而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。
原文:http://blog.csdn.net/yl2isoft/article/details/46595181