基础才是重中之重~方法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详解,如需转载请自行联系原博主。

目录
相关文章
|
4月前
|
容器 Cloud Native
云原生InputFile类问题之FileServer类的作用如何解决
云原生InputFile类问题之FileServer类的作用如何解决
20 1
|
编译器 C++
【C++11保姆级教程】final和override
【C++11保姆级教程】final和override
196 0
|
6月前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
65 0
|
设计模式 JavaScript 前端开发
class 继承的重点
前文已提过:在 class 出现之前,JavaScript 实现继承是件麻烦事,构造函数继承有加上原型上的函数不能复用的问题;原型链继承又存在引用值属性的修改不独立的问题;组合继承又存在两次调用构造函数的问题,寄生组合继承,写起来又太麻烦了,总之,在 class 出现前,JavaScipt 实现继承真是件麻烦事儿。
|
PHP 开发者
最终类 final|学习笔记
快速学习最终类 final,前面说的 PHP 是可以继承的,类是可以继承的,类有我可以继承子类,再往后类又可以继承孙子类,类可以无无限继承,现在确定一个问题,类继承的多了,代表类的重用性增加了,但是系统的解析复杂程度会增加,随之而来的是效率的降低。 那如果有些类已经达到最小的程度,无法再扩展时,或者不需要继续扩展了,这个时候就要使用最终类 final。现在了解一些什么是最终类,掌握 final 关键字的最终作用和实际应用场景。
最终类 final|学习笔记
|
存储 弹性计算 安全
《阿里云代码安全白皮书》5个维度应对3类代码安全问题
在互联网快速发展的时代,代码是企业最核心的资产,代码安全也是企业资产安全最重要部分;为了保护企业代码安全,各公司使出的手段也是五花八门。阿里云云效联合阿里云的代码安全能力从基础安全、备份与恢复、安全与加密、审计与洞察、代码安全检测5个维度,达成「进不来」、「搞不坏」、「译不破」、「带不走」、「赖不掉」的效果。
2501 1
《阿里云代码安全白皮书》5个维度应对3类代码安全问题
Java继承的综合案例
Java继承的综合案例
215 0
Java继承的综合案例
搞垮技术团队的那些方式方法
搞垮技术团队的那些方式方法
130 0
C#编程基础——方法
C#编程基础——方法
121 0
|
存储 缓存 Android开发
最全Handler解读,持续补充...
Handler  本文主要详细去解读Android开发中最常使用的Handler,以及使用过程中遇到的各种各样的疑问。  在Android开发的过程中,我们常常会将耗时的一些操作放在子线程(work thread)中去执行,然后将执行的结果告诉UI线程(main thread),熟悉Android的朋友都知道,UI的更新只能通过Main thread来进行。
1106 0