修罗场第二天:C#之面向对象基础(下)

时间:2021-10-27 03:26:28

------------接(上)

  抽象类

    抽象类也可以实现多态,使用关键字abstract。那么什么时候用抽象类呢?

         当父类的方法不知道怎样去实现的时候,此时可以将父类写成抽象类,将方法写成抽象方法。

以下是抽象类的特点:

抽象成员必须标记为abstract,而且不能有方法体; 抽象成员必须在抽象类中; 抽象类中可以有抽象成员,也可以有非抽象成员,非抽象成员可以给子类使用; 抽象类不能被实例化,也就是不能创建对象。 子类继承抽象类后,必须把父类中所有的抽象成员都重写(override)。 抽象成员的访问修饰符默认是public,且不能被更改。 抽象类有构造函数,虽然不能被实例化,但是可以被子类所用。

      如果父类的抽象方法中有参数,那么,继承这个父类的子类在重写父类的方法时也必须传入对应的参数。如果抽象父类的抽象               方法中有返回值,那么子类在重写这个抽象方法时,也必须要传入返回值。

    举例子:   

1 //动物叫的声音各有不同,这里我们用抽象类来实现 2 //声明Animal父类,Cat和Dog子类 3 public abstract class Animal 4 { 5 public abstract void Bark(); 6 } 7 public class Dog:Animal 8 { 9 public override void Bark() 10 { 11 Console.WriteLine("狗汪汪叫"); 12 } 13 } 14 public class Cat:Animal 15 { 16 public override void Bark() 17 { 18 Console.WriteLine("猫喵喵叫"); 19 } 20 } 21 //在主函数中调用一下 22 static void Main(string[] args) 23 { 24 Animal cat=new Cat(); 25 cat.Bark(); 26 Console.ReadKey(); 27 } 28 //最后结果:控制台中输出 猫喵喵叫

  接下来是实现多态的第三种方法:利用接口。

   接口的出现是为了解决一个类继承多个类的情况,,继承的多个类实际上就是接口。

   接口有以下特点:      

   接口是一种规范,一种能力,接口的功能单一,一个类继承了一个接口,就必须实现这个接口中的所有成员,不能被实例化。

   接口不能继承一个类,但是可以继承接口,接口中不能有字段和构造函数。