zoukankan      html  css  js  c++  java
  • .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     }

     

     

  • 相关阅读:
    Java学习——字符串
    Java学习——字符串
    【费马小定理+快速幂取模】ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies
    【费马小定理+快速幂取模】ACM-ICPC 2018 焦作赛区网络预赛 G. Give Candies
    Java学习——Eclipse下载,java配置,新建,输入输出
    Java学习——Eclipse下载,java配置,新建,输入输出
    python使用scikit-learn计算TF-IDF
    scanf,printf函数细节
    UVA 4855 Hyper Box
    poj 2001 Shortest Prefixes(字典树)
  • 原文地址:https://www.cnblogs.com/CodeFaker/p/3883874.html
Copyright © 2011-2022 走看看