zoukankan      html  css  js  c++  java
  • 多态

    namespace Protected
    {
        class Program
        {
            static void Main(string[] args)
            {
                Parent p = new Child();
                Console.WriteLine(p.X);
                Console.WriteLine(p.test());
                Console.WriteLine(p.test1());
                Console.ReadLine();
            }
        }
        public class Parent
        {
            public Parent()
            {
                Add(2);
            }
            public int X = 10;
    
            protected int Add(int y)
            {
                return X += y;
            }
            public virtual int test()
            {
                return 0;
            }
            public int test1()
            {
                return 0;
            }
        }
        public class Child : Parent
        {
            public int X = 9;
    
            public override int test()
            {
                return 15;
            }
            public  int test1()
            {
                return 15;
            }
        }
    }
    

     输出依次为12、15、0 可以看到

    Parent p = new Child();

    这里其实调用的是父类的X,也就是声明了一个孩子的人类对象。
    这样做的好处是,比如有个计算器的基类,现在有一个加法运算类,如果以后再次扩展,只需加一个减法的运算类继承基类、然后直接 基类 a=new 减法类() 就可以了,不需要改变基类中的代码。
    直观的解释:
    对外接口可能只是父类,这样可以方便你在内部扩展子类,比方说你又增加了一个子类,外面接口不用改变
    这就好比,你学习计算机学习的是面向通用的计算机的知识,学好以后,你去具体使用计算机,那么使用的是某个品牌某个型号的计算机,但是你不用关心它具体怎么实现的,你用通用的知识就可以驾驭它。

    关于后两个值的解释:
    另外需要注意ovrride,如果子类中不重写父类的方法test,那么调用的是父类的方法。

  • 相关阅读:
    Linq-分页查询
    思维导图软件xmind和mindmanager哪个更好
    Enterprise Architect使用教程
    敏捷开发之Scrum
    总结---4
    判断单链表是否存在环
    设计模式分类
    实用手册:130+ 提高开发效率的 vim 常用命令
    Reverse Linked List II
    Single Number and Single Number II
  • 原文地址:https://www.cnblogs.com/y8932809/p/5010053.html
Copyright © 2011-2022 走看看