Bootstrap

C# 抽象类的讲解 抽象类和接口的区别

C#中可以创建抽象类,用于提供类的部分成员实现,当某一个类继承自这个抽象类的时候,需要手动实现这个类中的抽象成员

抽象类中可以包含抽象方法,这个抽象方法不能去实现,而是在某个类继承自这个抽象类的时候实现

我们先定义一个抽象类  使用 abstract class   创建一个抽象类,写法和class相同

抽象类中可以定义抽象方法

​  给某一个方法加上abstract 关键字 把这个方法修饰成抽象方法,抽象方法不需要也不能拥有内容

 public abstract class Pet
 {
     public string Name
     {
         get;set;
     }
     public string Health
     {
         get;set;
     }
     public string Gender
     {
         get;set;
     }
     //抽象方法,又叫做虚方法,自身不去实现,如果有继承关系,子类需要实现该方法
     public abstract void Eat();

 }

如果继承的是抽象类,那么如果抽象方法没有实现,是在当前类上报错

如果继承的是接口,接口声明的方法没实现,报错的位置在接口名字上

由派生类(普通类)继承抽象类

当某一个类继承自一个抽象类之后,必须实现这个类中的抽象方法

override 重写和实现抽象类中的抽象方法

 public class Dog : Pet
 {
     //跟接口有区别,接口直接实现,抽象类需要重写.
     public override void Eat()
     {
         Console.WriteLine("狗喜欢吃骨头");
     }
     public void Test()
     {

     }
 }
 public class Cat : Pet
 {
     public override void Eat()
     {
         Console.WriteLine("狗喜欢吃骨头");
     }
 }

注意,如果是二次继承,抽象的特性会断掉

我们在继承cat类,抽象类的特征就会断掉

 public class SmallCat : Cat
 {

 }

总结:抽象类和普通类的区别:

1.抽象类不能实例化,普通的类可以实例化u
2.抽象类中可以有抽象方法,也可以有抽象方法,普通的类不能有抽象方法
3.抽象类可以和普通的类一样,有普通的方法
4.抽象类可以继承自抽象类,子类如果不是抽象类,必须重写抽象类的全部抽象方法
5.抽象方法就是被子类重写的,所以不能使用private修饰符

抽象类和接口的区别:

1.都可以定义一个类的契约,一个使用interface关键字,一个使用abstract关键字
2.接口中成员默认就是抽象,包括方法,属性,索引器和事件,但是不能包含字段和构造函数,也不能有        静态成员
3.一个类可以实现多个接口的继承,接口本身不能被实例化,但是类可以

;