c#接口和抽象类对比学习

什么是接口?

接口就是一种规范,协议(*),约定好遵守某种规范就可以写通用的代码。

定义了一组具有各种功能的方法。接口描述的是一种能力,具有这种能力的事物可以没任何关系。比如:

public interface  IFly{void fly();}

实现这个接口的可以是飞机,鸟等,他们都有飞的能力但没什么关系。而抽象类就不同了。

接口解决了类的多继承的问题

     接口解决了类继承以后体积庞大的问题。

     接口之间可以实现多继承

接口中的成员必须不能有实现(没实现说白了就是不能有大括号哦),接口不能实例化。

接口中的成员不能有访问修饰符,隐式公开public

接口中可以有属性、方法、索引器等(其实都是方法,可以用Reflector反编译看),但不能有字段

接口中的所有成员必须被子类中全部实现

接口的特点总结

   1.接口是一种规范。为了多态。

   2.接口不能被实例化。

   3.接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,

     不能修改。(默认为public)

   4.接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。

   5.接口中只能有方法、属性、索引器、事件,不能有“字段”。

   6.接口与接口之间可以继承,并且可以多继承。

   7.实现接口的子类必须实现该接口的全部成员。

   8.一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,

     并实现了接口IA,那么语法上A必须写在IA的前面。class MyClass:A,IA{},因为类是单继承的。

   9.当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract。(抽象类也能实现接口,用abstrac标记)

   10.“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)。

 

在编程时:

   接口→抽象类→父类→具体类(在定义方法参数、返回值、声明变量的时候能用抽象就不要用具体。)

   能使用接口就不用抽象类,能使用抽象类就不用类,能用父类就不用子类。

   避免定义“体积庞大的接口”、“多功能接口”,会造成“接口污染”。只把相关联的一组成员定义到一个接口中(尽量在接口中少定义成员)。单一职责原则

   定义多个职责单一的接口(小接口)(组合使用)。

抽象类和接口的区别

接口定义类的公共行为,抽象类定义类的公共实现

一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

接口中不能有实现,抽象类中可以有未实现成员也可以有实现的成员

接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。

如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。  如: 

 

 1   Public interface  IFly
 2
 3 {
 4
 5     void fly();
 6
 7      void eat();
 8
 9   }
10
11 Class Plane:IFly
12
13 {
14
15     //类实现了接口,必须实现它的所有未实现的成员,所以飞机必须也得有eat的方法。如果您说飞机吃油,那也没办法。
16
17      void fly(){…};
18
19        void eat(){…..};
20 }

 

什么时候使用抽象类,什么时候使用接口

抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。

 

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/3253179.html
时间: 2024-11-02 00:23:16

c#接口和抽象类对比学习的相关文章

JavaSE学习总结(六)——接口与抽象类

一.不需要实例化的原因 看一个示例: package com.zhangguo.chapter5.s1; /**动物园*/ public class Zoo { public static void main(String[] args) { Animal animal=new Animal(); animal.eat(); /**new谁调谁*/ /**LSP*/ Animal dog=new Dog(); dog.eat(); } } /**动物*/ class Animal { /**吃*

Java接口和抽象类实例分析

  本文实例讲述了Java的接口和抽象类.分享给大家供大家参考.具体分析如下: 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类. 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体

接口和抽象类,哪个更好呢?

问题描述 个人认为接口好,可以实现多重派生:) 解决方案 解决方案二:只要不定义属性,尽量用接口解决方案三:接口和抽象类无好坏之分,两者有不同的用途只能按需去用想学习何时用谁的最佳实践看看java设计模式相关的书另:如果有需要实现类方法,则不能用接口解决方案四:无意义的帖子,可删之解决方案五:没有哪个更好只有什么时候更适合用哪个解决方案六:引用4楼happysmhzp的回复: 没有哪个更好只有什么时候更适合用哪个 是的解决方案七:视情况而定解决方案八:合适最好

深入理解Java的接口和抽象类

对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象

Java接口和抽象类的区别深入剖析_java

本文剖析了Java学习中接口和抽象类的区别,对于初学者深入学习并准确掌握Java程序设计的理念至关重要.详情如下: Java初学者往往容易提出这样的问题:接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样.接口是对动作的抽象,抽象类是对根源的抽象.抽象类表示的是,这个对象是什么.接口表示的是,这个对象能做什么.比如,男人,女人,这两个类(如果是类的话--),他们的抽象类是人.说明,他们都是人. 人可以吃东西,狗也可以吃东西,你可以把"吃东西"定义成一

深入理解Java的接口与抽象类_java

对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为:    abstract void

Java接口和抽象类实例分析_java

本文实例讲述了Java的接口和抽象类.分享给大家供大家参考.具体分析如下: 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类. 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实

《.NET程序员面试秘笈》----面试题10 接口和抽象类该如何取舍

面试题10 接口和抽象类该如何取舍 .NET程序员面试秘笈[考点]抽象类的理解,抽象类和接口的区别. [出现频率] [解答] 接口和抽象类非常相似,两者都无法实例化,并且未实现部分都由派生类实现,其应用模型如图1.14所示. 结合图1.14可知,接口与抽象类的主要区别有以下几点: (1)抽象类只能派生类,而接口可以派生类和结构. (2)抽象类的派生类也可以是抽象类,即抽象成员在派生类中不一定被完全实现.而接口要求其派生类或结构必须完全实现其成员. (3)抽象类可以包含已经实现的成员,可以包含字段

对抽象编程:接口和抽象类

1. 引言 在我之前的一篇post <抽象类和接口的谁是谁非 >中,和同事管伟的讨论,得到很多朋友的关注,因为是不成体系的论道,所以给大家了解造成不便,同时关于这个主题的系统性理论,我认为也有必要做以总结,因此才有了本篇的新鲜出炉.同时,我将把上贴中的问题顺便也在此做以交代. 2. 概念引入       什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称.参数和返回值.接口方法不能包含任何实现,clr 允许接口可以包含事件.属性.索引器.静态方法.静态字段.静态构造函数以及