码迷,mamicode.com
首页 > 其他好文 > 详细

接口和抽象类的区别

时间:2015-03-02 22:28:52      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

先引入接口和抽象类的概念:

  • 接口(interface):用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。
  • 抽象类:包含抽象方法的类(不需要必须包含)。那么什么又是抽象方法呢?抽象方法是没有方法内容的,只有一个方法名和参数列表的方法。并以;结尾。为了标注他的与众不同,在他的返回类型前加abstract。并在class前加abstract。简言之,由abstract修饰的方法和类就是抽象的方法和类。

 

接口与抽象类的相同点:

      1、不能实例化;

      2、包含未实现的方法声明;

      3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);

 

接口与抽象类的区别:

     1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定

     2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;     

     3.一个类一次可以实现若干个接口,但是只能扩展一个父类    

     4.接口可以用于支持回调,而继承并不具备这个特点.     

     5.抽象类不能被密封。   

     6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 

     7.与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。   

     8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的留给子类去实现。   

     9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。   

    10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解)。同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。   

    11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.

 

转载:http://blog.csdn.net/cjr15233661143/article/details/8592527

 

接口和抽象类的区别

标签:

原文地址:http://www.cnblogs.com/MQNH/p/4309729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!