zoukankan      html  css  js  c++  java
  • 类的多态问题

    class Program
        {
            static void Main(string[] args)
            {
                A a = new C();
                a.Show();
               Console.ReadKey();
            }
        }
        public class A
        {
            public A()
            {
                Console.Write("A构造中调用结果:");
                Show();
            }
            public virtual void Show()
            {
                Console.WriteLine("A");
            }
        }
        public class B : A
        {
            public B()
            {
                Console.Write("B构造中调用结果:");
                Show();
            }
            public new virtual void Show()   //覆盖父类A的方法
            {
                Console.WriteLine("B");
            }
        }
        public class C : B
        {
            public C()
            {
                Console.Write("C构造中调用结果:");
                Show();
            }

            public override void Show()      //重写B类的方法
            {
                Console.WriteLine("C");
            }
        }

    结果如下:A

    子类的实例只调用子类的方法, 父类的实例只调用父类的方法.

    如果把子类实例给父类,通过父类实例调用方法,那就不一样了 ,搜索函数入口时从父类的入口表开始,根据虚方法定义查找子类的重写方法.

    如上

    搜索函数入口时从基类A的入口表开始,根据虚方法定义查找子类的重写方法,但是由于无法再B类定义中发现override方法
    则最终调用的是A的现实
  • 相关阅读:
    多测师讲解unittest介绍及自动化测试实现流程_高级讲师肖sir
    多测师讲解常用的测试工具分为10类_高级讲师肖sir
    多测师讲解接口测试 _面试题003_高级讲师肖sir
    多测师接口测试 --常见的接口面试题目002---高级讲师肖sir
    Linux的mysql搭建
    学完爬虫的笔记
    postman测试实例--断言
    jemeter安装步骤
    selenium的显示等待和隐式等待区别
    loadrunner录制不了浏览器
  • 原文地址:https://www.cnblogs.com/top5/p/1584362.html
Copyright © 2011-2022 走看看