C#接口与抽象类

接口

接口是一种类型,一套语法规范,一个模板。

接口不可以实例化

接口的成员不可以有具体实现

接口继承接口不需要实现成员

子类必须实现接口必须重写成员

使用interface关键字定义接口

定义:

interface 接口名(一般以I开头){
属性:
类型 属性名{get;set;}
方法:
返回值类型 方法名(参数列表);
}
子类实现接口必须重写接口中的成员;
class A:接口{
public  返回值类型 接口方法(){}
}
接口可以多实现;

class A:接口1,接口2,...{}

有人会问,为什么要用接口呢?我们想象一下一个场景,一个项目需要写很多个类,将这些类分给项目组不同的人写,而这些类里有很多相同或相似的方法,比如写各种动物类,动物都有吃喝拉撒的行为(方法),而不同的程序员命名习惯不一样,这些方法在不同的程序员手中可能会有不同的名字,这样当项目整合的时候,工作量就会很大了,而如果采用接口,将吃喝拉撒这些会相似的行为都写进接口,规定哪些类必须继承哪些接口,那整个项目将会很规范,相当于都用同一套规范,项目整合的时候将会减少很多工作量。

抽象类:

1.不可以实例化

2.抽象类可以拥有抽象成员(声明方法头不是实现,没有方法体)

3.子类继承抽象类必须重写抽象成员

4.抽象继承抽象类不需要重写抽象成员

5.抽象可以实现接口

6.抽象类也可以继承实例类

7.其他都跟实例类一样

8.与接口不同的是,类是单继承
使用abstract关键字定义抽象类,虚属性、虚方法

定义:
abstract class 类名{
定义抽象成员:
abstract 属性类型 属性名{get;set;}
abstract 返回值类型 方法名(参数列表);
}
子类继承抽象类:
class A:抽象类{
//重写抽象成员
public override 抽象方法(){}
}
//子类继承父类实现接口
class A:父类,接口1,接口2,..{

}

抽象类和接口的区别

    1.抽象类可以有构造方法,接口中不能有构造方法。


    2.抽象类中可以有普通成员变量,接口中没有普通成员变量


    3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。


    4. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。


    5. 抽象类中可以包含静态方法,接口中不能包含静态方法


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


    7. 一个类可以实现多个接口,但只能继承一个抽象类。


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

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

猜你喜欢

转载自blog.csdn.net/weixin_42446849/article/details/80989113