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
  • 相关阅读:
    linux系统下抢占式内核与非抢占式内核的区别
    Cache映射
    Delphi利用系统环境变量获取常用系统目录
    visual studio2008中AJAX的安装配置,及错误!
    网站配置工具无法建立与数据库的连接的解决方案
    PowDesigner工具的使用
    近日网站开发收获(一)
    (转载)power designer 12.5和破解补丁下载
    《Sqlserver 之我的新大陆》
    学习之路
  • 原文地址:https://www.cnblogs.com/icez/p/3528665.html
Copyright © 2011-2022 走看看