zoukankan      html  css  js  c++  java
  • 什么是多态?

    多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

    多态建立在类的继承之上:

    • 类成员的 “横向拓展” (类成员越来越多)
    • 类成员的 “纵向拓展” (类的行为改变,类的成员的 “版本升高”)
    • 类成员的隐藏 (new 关键字)——不常用,因为理解复杂且容易出错
    • 类成员的重写 (override 关键字)
    • 重写和隐藏发生的条件:函数或属性成员一致,拥有可见性(如父类的是private,那肯定不能重写了),函数或属性签名需要一致(方法名,参数类型,返回类型)

    多态:

    基于类的重写机制(virtual-override):函数成员的具体行为(版本)由引用的对象决定

    class Program
        {
            static void Main(string[] args)
            {
                Person person = new Person();
                person.Show();
    
                Person teacher = new Teacher();
                teacher.Show();
    
                //子类方法版本被隐藏 则找寻上一个版本
                Person doctor = new Doctor();
                doctor.Show();
    
            }
        }
    
        class Person
        {
            public virtual void Show()
            {
                Console.WriteLine("I am Person");
            }
        }
    
        class Teacher : Person
        {
            public override void Show()
            {
                Console.WriteLine("I am Teacher");
            }
        }
    
        class Doctor : Teacher
        {
            //在多态状态时  隐藏改方法
            public new void Show()
            {
                Console.WriteLine("I am Teacher");
            }
        }

      

    基于接口的多态机制:接口的行为由它决定的接口实现

    class Program
        {
            static void Main(string[] args)
            {
                IPerson person = new Person();
                person.Show();
    
                IPerson teacher = new Teacher();
                teacher.Show();
            }
        }
    
        interface IPerson
        {
            public void Show();
        }
    
        class Person : IPerson
        {
            public void Show()
            {
                Console.WriteLine("I am Person");
            }
        }
    
        class Teacher : IPerson
        {
            public void Show()
            {
                Console.WriteLine("I am Teacher");
            }
        }

     

      

  • 相关阅读:
    进程上下文VS中断上下文
    字符串分割处理
    C++接收含有空格的字符串
    TLS分析
    位运算之bit_xor、bit_not、bit_and、bit_or
    GET和POST区别
    我的 HTTP/1.1 好慢啊!
    HTTP/2与HTTP/1的比较
    C++11新特性之一— auto 和 decltype 区别和联系
    C++ tuple元组的基本用法(总结)
  • 原文地址:https://www.cnblogs.com/Xieyiincuit/p/15394520.html
Copyright © 2011-2022 走看看