首页 > 代码库 > .net学习笔记--使用抽象方法实现多态

.net学习笔记--使用抽象方法实现多态

在使用抽象方法实现多态之前,我们必须知道一些知识点:

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 Name14         {15             get { return name; }16             set { name = value; }17         }18         int age;19      20         public int Age21         {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:Person2     {3         //子类如果不想重写父类的方法,也必须添加override关键字,但是同时可以声明为抽象的方法,不去做真正的重写4         public abstract override void Show();5     }