C#基础(二)--抽象类和接口

一、抽象类

   含有abstract修饰符的类为抽象类,抽象类可以拥有自己的构造函数,但是不能直接通过new进行实例化,可以通过子类继承,实例化子类的时候抽象类也会被实例化。

   抽象类可以包括方法也可以包括抽象方法,这是类所不能的。抽象方法只能声明于抽象类中,且不能进行实现,派生类必须覆盖它们。

   抽象类可以派生一个抽象类,可以覆盖基类的抽象方法也可以不覆盖。

二、接口

   接口是引用类型,不能被实例化,一旦继承必须全部实现,可以多继承,不能有访问修饰符,不能实现方法。

   和抽象类有三点相似之处:1.不能被实例化  2. 包含未声明的方法  3.派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。

  接口有以下特性:

        接口除了可以包含方法外,还可以包含属性、索引器、事件,而这些成员都被定义为共有的。除此之外,不能包含任何其他成员,例如:常量、域、

        构造函数、析构函数、静态成员。

抽象类和接口的区别:

   1.抽象类只能单继承,接口可以多继承。

   2.抽象类中可以声明构造函数,接口中不可以。

   3.抽象类中可以使用public、private、protected等访问修饰符,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

   4.抽象类中可以包含static静态方法,接口中不行。

   5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

   6. 抽象类中可以包含非抽象的普通方法,接口只能声明不能实现。

   7. 抽象类中可以有普通成员变量,接口中不能。

 

抽象类和接口的使用场景:

   抽象类:

   抽象类主要用于关系密切的对象 ,组件的所有实现间提供通用的已实现功能,

   如果要创建组件的多个版本,设计大的功能单元 ,将使用抽象类。

   接口:

    接口适合互不相关的类提供通用功能,小而凝练的功能块也使用接口。好的接口定义要具有专一性,避免造成接口污染。

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

 

posted @ 2019-01-14 14:54  蹦蹦郭  阅读(242)  评论(0编辑  收藏  举报