• 基础才是重中之重~方法override详解


    回到 目录

    之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享。

    方法的override,即方法的覆写或者重写,有时还是习惯叫它英文override,它是指将父类的abstract或者virtual方法进行重新设计,可以将新的功能加入其中,看起来很不错,但在使用过程中,有时我们可能拿不准它,下面我说几点:

    一  父类是抽象类,这时,它的实例化需要通过子类来完成,这时的override是子类最后重写的

    二  父类是普通类,这时,它的实例化工作如果由自己完成,结果就是父类virtual的结果,与它的子类无关。

    三  父类是普通类,它的实例化工作如果由子类完成,那么,它的结果就是子类方法override的结果

    OK,下面我们来说一下例子,它由father类和sons类组成,father类是一个普通类,在这实现当中,它很可能是个泛型类,如仓储模式的实现

       /// <summary>
        /// 一个爸爸
        /// </summary>
        class Father
        {
            public virtual void print()
            {
                Console.WriteLine("我是爸爸");
            }
        }

    下面是儿子A对爸爸的print方法的重写工作

        /// <summary>
        /// 一个儿子A
        /// </summary>
        class SonA : Father
        {
            public override void print()
            {
                Console.WriteLine("我是儿子");//override father class print method.
            }
    
            public void sonPrint()
            {
                base.print(); //我是爸爸
                print();//我是儿子
    
            }
        }

    而下面是对print方法的各种调用工作,包括了实现化的方式

         static void Main(string[] args)
            {
    
                SonA son = new SonA();
                son.sonPrint(); //我是爸爸,我是儿子
                Father father = new Father();
                father.print();//我是爸爸
                Father son2 = new SonA();
                son2.print();//儿是儿子
            }

    OK,通过结果我们可以看出:

    在儿子类里,base.print()方法走的是爸爸的print;print走的是儿子

    在儿子类以外,使用爸爸自己去实例化后,print走的是爸爸的;使用儿子进行实例化后,print方法走的是儿子重写后的;

    回到 目录

  • 相关阅读:
    JDK的KeyTool和KeyStore等加密相关
    关于分布式事务的随笔[待续]
    Netty实例几则
    Disruptor快速入门
    Java获取系统环境信息
    JDK的BIO, NIO, AIO
    四种常用IO模型
    JDK的多线程与并发库
    递归转换为迭代的一种通用方式
    二叉树的java实现
  • 原文地址:https://www.cnblogs.com/lori/p/3415448.html
Copyright © 2020-2023  润新知