基础才是重中之重~方法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方法走的是儿子重写后的;

本文转自博客园张占岭(仓储大叔)的博客,原文链接:基础才是重中之重~方法override详解,如需转载请自行联系原博主。

目录
相关文章
|
3月前
|
容器 Cloud Native
云原生InputFile类问题之FileServer类的作用如何解决
云原生InputFile类问题之FileServer类的作用如何解决
17 1
|
5月前
|
Java
【JAVA学习之路 | 基础篇】方法的重写(Override)
【JAVA学习之路 | 基础篇】方法的重写(Override)
|
12月前
|
编译器 C++
【C++11保姆级教程】final和override
【C++11保姆级教程】final和override
175 0
|
5月前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
58 0
|
Java
java继承重点
设计原则: 对于已经投入使用的类,尽量不要进行修改。 推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新内容。 继承关系中,父子类构造方法的访问特点: 1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。 2.子类构造可以通过super关键字来调用父类重载构造。 3.super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。 总结: 子类必须调用父类构造方法,不写则赠送super(();写了则用写的指定的(super调用,super只能有一个,还必须是 第一个。
71 0
继承中的this()和super()特别说明
继承中的this()和super()特别说明
59 0
Java继承的综合案例
Java继承的综合案例
206 0
Java继承的综合案例
搞垮技术团队的那些方式方法
搞垮技术团队的那些方式方法
126 0
C#编程基础——方法
C#编程基础——方法
118 0
|
敏捷开发 自然语言处理 数据可视化
实例化需求不可或缺的精益、敏捷需求实践 | 方法案例二
本文的主旨是帮助大家,第一:理解实例化需求,介绍实例化需求的 Why 和 What;第二:实施实例化需求,介绍实例化需求的 Who,When 和 How。如此 4W1H,帮助大家掌握这一高效的精益和敏捷需求实践,并落实验收测试驱动开发(ATDD)方法。
1661 0
实例化需求不可或缺的精益、敏捷需求实践 | 方法案例二