zoukankan      html  css  js  c++  java
  • 重写和多态

    重写

    using System;
    
    namespace Test1
    {
        class Program
        {
            static void Main(string[] args)
            {
                    Vehicle car = new Car();//可以用父类类型变量去引用一个子类的实例
                    car.Run();
            }
            public class Vehicle
            {
                public virtual void Run()
                {
                    Console.WriteLine("i am running");
                }
            }
    
            class Car : Vehicle
            {
                public override void Run()
                {
                    Console.WriteLine("car am running");
                }
            }
        }
    }
    

    隐藏

    如果把父类的virtal和子类的override抹去,那么子类就没有重写父类的版本,子类的版本隐藏,父子类没有重写关系
    重写与隐藏发生的条件:
    1.函数成员(常用的是方法和属性)

    2.可见(public和protected 访问级别)
    3.签名一致(参数一致,属性名,方法名)

    多态

    基于重写机制(virtual->override)
    函数成员的具体行为由对象决定,调用最新的版本。
    C#语言无论是对象还是变量都有类型,所以会产生代差。

    子类的类型可以赋值给一个父类类型的变量,但是到过来不行,即父类类型的实例赋值给子类类型的变量。

    补充

    python对象是有类型的,变量没有类型,python重写看不到多态的效果,因为对象是什么类型,输出的赋值的变量就是什么类型。
    javascript也是一样,不支持强类型(变量无类型),可以重写,但是没有多态。
    Typescript 变量和对象都有类型,所以有多态。

  • 相关阅读:
    数据结构-链式结构-队列
    c数据结构-线性结构-队列
    栈的四则运算的运用
    C++/C—函数指针
    向显存写数据x8086
    结构体内存偏移量
    MFC-ComboBox控件的使用
    MFC的Edit text编辑框控件
    C/C++反汇编-各种表达式(加减乘)
    MFC- 学习控件-静态文本
  • 原文地址:https://www.cnblogs.com/lpxspring/p/12426409.html
Copyright © 2011-2022 走看看