zoukankan      html  css  js  c++  java
  • C#基础|面向对象之多态

     
    什么是多态
     
    一句话解释,同一种事物表现出的多种形态。
    看完以后,应该还是蒙的,还是看代码吧。。
    现有Person类,Student类,Teacher类
    其中Person类是Student和Teacher类的父类。换句话说,Student类和Teacher类都继承自Person类。
    在Person类中有一个SayHi方法,Student和Teacher的SayHi方法肯定是不一样的。
     
    现要求在一个静态方法中,他的形参是Person p,实参可能是Student类或者是Teacher类,在函数内部通过调用p.SayHi()来达到调用其不同子类的不同SayHi方法。
    如果实现了上面的要求,可以说就是多态的实现。
     
    三种方式实现多态
     
    通过虚方法
     
    //person类,父类
    class Person
    {
    public virtual void SayHi()
    {
    Console.WriteLine(“我是Person类中的SayHi方法”);
    }
    }
    //student类,子类
    class Student : Person
    {
    public override void SayHi()
    {
    Console.WriteLine(“我是Student类中的SayHi方法”);
    }
    }
    //Teacher类,子类
    class Teacher : Person
    {
    public override void SayHi()
    {
    Console.WriteLine(“我是Teacher类中的SayHi方法”);
    }
    }
     
    通过抽象类
     
    //person类,父类
    abstract class Person
    {
    public abstractvoid SayHi();
    }
    //student类,子类
    class Student : Person
    {
    public override void SayHi()
    {
    Console.WriteLine(“我是Student类中的SayHi方法”);
    }
    }
     
    //teacher这里就不写出来了
     
    通过接口
     
    public interface IPerson
    {
    void SayHi();
    }
     
    class Student : IPerson
    {
    public void SayHi()
    {
    Console.WriteLine(“我是Student类中的SayHi方法”);
    }
    }
     
    通过虚方法实现多态的完整代码
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace 多态的实现
    {
    class Program
    {
    static void Main(string[] args)
    {
    Student stu = new Student();
    Teacher tea = new Teacher();
    Fun(stu);
    Fun(tea);
     
    Console.ReadKey();
    }
     
    static void Fun(Person p)
    {
    p.SayHi();
    }
    }
     
    class Person
    {
    public virtual void SayHi()
    {
    Console.WriteLine("我是Person类中的SayHi方法");
    }
    }
     
    class Student : Person
    {
    public override void SayHi()
    {
    Console.WriteLine("我是Student类中的SayHi方法");
    }
    }
     
    class Teacher : Person
    {
    public override void SayHi()
    {
    Console.WriteLine("我是Teacher类中的SayHi方法");
    }
    }
    }
     
    运行结果
    我是Student类中的SayHi方法
    我是Teacher类中的SayHi方法
     
     
    结束语
     
    写这篇随笔的目的是出于锻炼自己的表达能力和思维逻辑能力的,若给你后面的学习带来误解请谅解。
     
    感谢博客园
    感谢黑马训练营
    2014/1/17 15:00
  • 相关阅读:
    ccBPM典型的树形表单和多表头表单的流程示例
    Arrays -数组工具类,数组转化字符串,数组排序等
    String
    ArrayList
    Random
    Scanner
    Phone-java标准类
    HelloWorld-java
    c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。
    c++实现哈夫曼树,哈夫曼编码,哈夫曼解码(字符串去重,并统计频率)
  • 原文地址:https://www.cnblogs.com/icez/p/3528665.html
Copyright © 2011-2022 走看看