.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 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学习笔记--使用抽象方法实现多态,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。