• 关于overload,overwrite,override的使用区别


    找工作很辛苦,转了一周了还没有头绪,想回学校散散心,于是回去了,回去我便被称为了高手,有人请教我"new"是调用的什么方法
    我仔细一看上边有一个基类,下边有三个继承类,我一看明白了,就知道是和override有关系, 但是这个new关键字的我还是第一次看到呢,当时我也很无语,正所谓知耻后勇嘛,回来查了一翻,暂时有了点头绪了
    切入正题:
     
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace Override_Overload_Overwrite
    {
      //基类    public class Parent
        {
            public void F()
            {
                Console.WriteLine("Parent.F()");
            }
            public virtual void G()
            {
                Console.WriteLine("Parent.G()");
            }
            public int Add(int x, int y)
            {
                return x + y;
            }
            //重载(overload)Add函数
            public float Add(float x, float y)
            {
                return x + y;
            }
        }
    //派生类1    
      class ChildOne:Parent
        {
            //重写(overwrite)父类函数
            new public void F()
            {
                Console.WriteLine("ChildOne.F()"); 
            }
            //覆写(override)父类虚函数,主要实现多态
            public override void G()
            {
                Console.WriteLine("ChildOne.G()");
            }
        }
    //派生类2    
      class ChildTwo:Parent
        {
            new public void F()
            {
                Console.WriteLine("ChildTwo.F()");
            }
            public override void G()
            {
                Console.WriteLine("ChildTwo.G()");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Parent childOne = new ChildOne();
                Parent childTwo = new ChildTwo();
                //调用Parent.F()
                childOne.F();
                childTwo.F();
                //实现多态
                childOne.G();
                childTwo.G();
                Parent load = new Parent();
                //重载(overload)
                Console.WriteLine(load.Add(1, 2));
                Console.WriteLine(load.Add(3.4f, 4.5f));
                Console.Read();
            }
        }
    }
    
     
    1. 对于 overload 我听过的最多的看法就是派生类中的方法和基类中的方法名相同,只是参数类型不同,其实更确切的说应该是返回类型的不同---它并没有关键字;
    2. 对于 overwrite 也就是我朋友问我的这个问题, overwrite 就是将方法名和方法参数都重写一遍,就仿佛基类中根本不存在这样一个方法似的,自然它的关键字就是 new 了;
    3. 对于 override 是我们最常听说的了---覆写(也有人叫做重写),这一方法是继承来自基类的方法,但是方法名要重写---关键字为override ;
    在这里要感谢  iTech's Blog 的博客,个人认为在这篇博客中C++的解释方法更好理解,同是面向对象的编程,都是大同小异的吧!
    小弟初来乍到,还算不上小菜,请高手批评指正!互相促进,互相学习!
    现在可以给朋友扩谈一番了!
     
     
  • 相关阅读:
    iOS网络编程--NSConnection的同步连接与异步连接
    NSThread基础使用
    多线程基础
    《软件工程》总结
    作业4(结对编程项目--四则运算)
    PSP记录个人项目耗时情况
    作业3
    作业二 流行的源程序版本管理软件和项目管理软件各自的优点缺点
    作业2
    作业
  • 原文地址:https://www.cnblogs.com/distance/p/2023799.html
Copyright © 2020-2023  润新知