在使用抽象方法实现多态之前,我们必须知道一些知识点:
1.抽象类不能被实例化;
2.抽象类可以包含非抽象成员,它们可以由其子类继承调用。
我们可以先创建一个Person的抽象类,代码如下:
1 abstract class Person 2 { 3 4 public Person() { } 5 6 public Person(string name,int age) 7 { 8 Name = name; 9 Age = age; 10 } 11 string name;12 13 public string Name 14 { 15 get { return name; } 16 set { name = value; } 17 } 18 int age; 19 20 public int Age 21 { 22 get { return age; } 23 set { age = value; } 24 } 25 26 public abstract void Show(); 27 }
Person类中我们定义了个抽象方法Show(),注意抽象方法只能在抽象类中,而且其没有方法体。
接下来写两个继承Person类的两个子类,代码如下:
1 class Student:Person 2 { 3 public override void Show() 4 { 5 Console.WriteLine("我是student类的Show方法:{0},{1}",Name,Age); 6 } 7 } 8 class Teacher : Person 9 { 10 11 public override void Show() 12 { 13 Console.WriteLine("我是teacher类的Show方法:{0},{1}", Name,Age); 14 } 15 }
当子类继承抽象类时:1.重写方法必须添加关键字override关键字,否则不认为是重写方法
2.override方法的方法签名必须和父类的方法完全一样
3.override方法必须找到可以被重写的父类方法
4.抽象方法子类必须重写
抽象类跟子类都写完了 ,接着就是实现多态了,多态的使用方式一般有三种:
1.声明父类变量,实例化子类对象
2.父类做为参数,传入子类对象
3.父类做为方法的返回值,返回具体的子类对象
实现多态代码如下:
1 static void Main(string[] args) 2 { 3 Student stu = new Student() {Name="aa",Age=18 }; 4 Teacher tea = new Teacher() {Name="bb",Age=19}; 5 // 这里并没有创建Person对象。只是使用它做为类型创建一个数组对象 6 Person[] objs=new Person[2]; 7 objs[0] = stu; 8 objs[1] = tea; 9 10 foreach (Person item in objs) 11 { 12 item.Show();//多态是指不同的子类对象的响应,多态是行为的多态 13 } 14 Console.ReadKey(); 15 }
最后还有一点,抽象类也可以继承抽象类,但是我们知道,继承抽象类的子类必须重写抽象类的抽象方法,当抽象类继承抽象类时,继承的抽象方法必须加上个override。代码如下:
1 abstract class Manager:Person 2 { 3 //子类如果不想重写父类的方法,也必须添加override关键字,但是同时可以声明为抽象的方法,不去做真正的重写 4 public abstract override void Show(); 5 }
.net学习笔记--使用抽象方法实现多态,布布扣,bubuko.com
时间: 2024-10-02 14:56:58