C# 抽象类

使用abstract关键字修饰的类叫做抽象类。父类无法确定子类行为时可以定义为抽象类

抽象类特点:

  1. 抽象类不能被实例化,主要用于被继承;抽象类里可以包含两种抽象成员,分别是抽象方法声明和抽象属性,同时可以包含其他非抽象成员。也可以包含构造函数,虽然不能被实例化
  2. 如果继承抽象类,则需实现抽象类中的所有抽象成员;如果子类也是一个抽象类,则可以不重写
  3. 不能使用Sealed关键字修饰抽象类,因为Sealed意味着不能被继承,同样Static也不能用于修饰抽象类,因为Static意味着会有一个实例
  4. 抽象成员的访问修饰符不能是private
 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //抽象类不允许创建对象
 6             Animal a = new Cat(); //new Dog();
 7             a.Bark();
 8             Console.ReadKey();
 9         }
10     }
11 
12     abstract class Animal
13     {
14         public abstract void Bark(); 
15     }
16 
17     class Dog : Animal
18     {
19 
20         public override void Bark()
21         {
22             Console.WriteLine("狗狗旺旺的叫");
23         }
24     }
25 
26     class Cat : Animal
27     {
28         public override void Bark()
29         {
30             Console.WriteLine("猫咪喵喵的叫");
31         }
32     }

接口的抽象类的相同点和区别

相同点:

  1.  接口和抽象类都不能实例化
  2.  接口和抽象类都包含未实现的方法
  3.  接口和抽象类都可以被子类继承
  4.  子类必须实现接口的接口成员和抽象类的抽象成员

区别:

  1.  抽象类只能继承自一个基类;接口可以继承自多个接口
  2.  抽象类可以包含字段、属性、方法;接口只能包含属性,方法,索引器,事件,不能包含字段,构造函数、析构函数和静态成员或常量
  3.  抽象类可以包含抽象方法和实例方法;接口只包含抽象方法,不能有方法实现。
  4.  抽象类抽象成员必须显式用public修饰;接口默认为public,且不用public修饰,接口方法不能用abstract或者virtual修饰

猜你喜欢

转载自www.cnblogs.com/zhaoyl9/p/13196683.html