Ⅰ.抽象类
1.抽象类、抽象方法
抽象类:通常情况下,它里面有抽象方法,类前面定义了一个abstract
抽象方法:只定义了方法的名称,没有定义方法的内容
2.为什么要使用抽象类、抽象方法?
都是为了继承
3. 怎么去定义抽象类,抽象方法?
abstract +类名,abstract+方法名
4.特点:
?.抽象类不能被实例化;
?.抽象方法的作用是为子类提供一个统一的接口,抽象方面里面只有声明,没有实现;
?. 一个类一旦继承了一个抽象类,就必须实现对该抽象类里面所有的抽象方法的实现;
public abstract class Person { public abstract void A(); public abstract void B(); }
Person
public class C :Person { public override void A() { Console.WriteLine("China"); } public override void B() { Console.WriteLine("nihao"); } public static void Main() { C me = new C(); me.A(); } }
class C :Person
?.一个抽象类里面可以有非抽象方法,但是一旦一个类里面有抽象方法,该类就为抽象类了;
?.抽象方法在声明后用一个;结束,不需要用{};
?.抽象方法在覆写的时候不需要声明为虚方法;
Ⅱ.接口
接口:可以看成一个更加严格意义上的抽象类,当是一个接口的时候,它里面只能是抽象方法,而不能有非抽象方法
1、怎么去定义一个接口?
Interface +类名
2、怎么去定义接口里面的方法?
eg:
void A();
也可以加上参数void A(string name);
注意:千万不能这么写,void B(){};//不能这样写,因为接口里面全部都是只定义了方法名,而没有具体的实现过程
4、特点:
?.接口用来实现多继承,一个类只能有一个父类,但可以继承于多个接口class A :B,C
(可以是继承这个接口class Animal:Interface1,也可以继承另一一个接口class Animal:Interface1,Interface2)
?. 接口是一种特殊的抽象类,它里面规定得更严格,里面的方法只能为抽象方法
?.定义一个接口的时候,一般为缺省,即interface +类名,前面自动加上了public abstract,定义接口中的方法时,也只需要写返回类型 +方法名即可,因为也默认为public abstract
?.接口里面的所有成员都是公共的
?.一个类继承与一个接口,就必须完成该接口中所有方法的实现
?.接口不能包含字段,构造函数,静态变量,或者常量等
5、接口用在什么地方?
接口是多继承,接口的作用相当于一个工厂要生产插座,提供一个模型,模型没有提供实现的具体方法,具体的实现过程,只是定义了一个模型。
6、为什么要使用接口?
就是为了继承,统一规范。
interface Interface1 { //接口里面只能用抽象的方法 void A(); void B(string Name);//string Name参数可以写 }
Interface1
class Animal:Interface1 { //一个类继承了一个接口,就要去完成接口里面所有的override,必须要override public override void A() { } public override void B() { } public Animal() { Console.WriteLine("我是动物类!"); } }
Animal:Interface1(继承接口)
Ⅲ.抽象类和接口有什么区别?
区别:
1.抽象类:有抽象的方法,也有非抽象的方法;
接口:是更加严格意义上的抽象方法,里面必须全部是抽象方法;
2.抽象类:抽象类里面的成员可以是私有的private,公共的public,受保护的protected;
接口:里面所有成员都是公共的public;
共:
1.一个类继承一个抽象类或者一个接口,它必须要override抽象类/接口里面的所有方法。