`

重载 重写 覆盖

 
阅读更多
C++:

Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。

Override(覆盖):是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。

Overwrite(重写):是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual
关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual
关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

特别注意

如果基类有某个函数的多个重载(overload)版本,而你在子类中重写(overwrite)了其中的一个,或是子类添加新的函数版本,则所有基类的重载版本都被遮蔽。所以,正常情况下,在子类中应重写基类中的所有重载版本。

具体地讲,继承类中的重载和重写都包含了重写的涵义,即只要函数名一样,基类的函数版本就会被遮蔽,所以,在派生类中要保持基类的重载版本,就应该重写所有基类的重载版本。重载只在当当前类中有效,继承会失去重载的特性。也就是说,把基类的重载函数放在继承类里,就必须重写。



C#:

overload (重载)关键字: 无
1.使用的地方:同一类里。(其实是同一类里同一名称的方法不同版本的一种叫法)
2.要重载的方法和被重载的方法要求:参数列表不同或返回类型和参数列表都不同,只有返回类型不同不能重载。(所谓的参数列表不同就是参数个数或者参数类型不同或者二者都不同)

overwrite (重写)关键字:new
1.用来是从父类继承的与是由了new关键字的方法的方法名一样的所以方法无效就像父类里不存在这些方法一样。只要去方法名一样别的没要求。

override (覆写)关键字: override 
1.override的方法必须父类的(直接父类或间接父类(就是向上n层的父类))虚方法或抽象方法其中抽象方法是必须覆写的。
2.要求3处相同
相同的方法名称称;
相同的参数列表;
相同的返回类型。

using System;
using System.Collections.Generic;
using System.Text;

namespace Override_Overload_Overwrite
{
    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;
        }
    }
    class ChildOne:Parent
    {
        //重写(overwrite)父类函数
        new public void F()
        {
            Console.WriteLine("ChildOne.F()");
        }
        //覆写(override)父类虚函数,主要实现多态
        public override void G()
        {
            Console.WriteLine("ChildOne.G()");
        }
    }
    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();
        }
    }
}

分享到:
评论

相关推荐

    c++ 重载、覆盖、重写

    ### C++中重载、重写(覆盖)与隐藏的概念及区别 #### 一、引言 在C++面向对象编程中,理解重载、重写(覆盖)以及隐藏的概念至关重要。这些概念不仅有助于我们更好地设计类和继承体系,还能帮助我们避免一些常见的...

    重载,重写,覆盖,多态

    ### 重载、重写、覆盖与多态的深刻剖析 在面向对象编程语言中,如Java、C#等,重载(Overloading)、重写(Overriding)、覆盖(也称为重写)以及多态(Polymorphism)是几个非常重要的概念。它们之间既有关联又有...

    重载重写重定义测试代码

    在C++编程语言中,"重载"(Overloading)、"重写"(Overriding)和"重定义"(Redefinition)是三个关键的概念,它们对于理解和掌握面向对象编程至关重要。下面将详细阐述这三个概念及其在实际编程中的应用。 **1. ...

    重载与覆写/重写的区别

    重载与覆写/重写的区别 区别 重载 覆写 1 单词 OverLoading Override 2 概念 方法名称相同,参数的类型或个数不同 方法名称相同,参数的类型或个数相 同,返回值类型相同 3 范围 发生在一个类之中...

    C++中重载、重写(覆盖)和隐藏的区别实例分析

    在C++中,面向对象编程涉及三个重要概念:重载(Overloading)、重写(Overriding,也称为覆盖)和隐藏(Hiding)。这些概念在理解C++的多态性和类继承机制时至关重要。 1. 重载(Overloading) 重载是指在同一个...

    C#中重载重写和覆盖的定义与区别

    C#中重载重写和覆盖的定义与区别 C#中重载、重写和覆盖是三个重要的概念,它们都是在面向对象编程中使用的,但是它们之间有着明显的区别。 一、重载 重载(Overload)是重新加载的意思,指的是同一个类中同名,...

    重载、重写、重构.md

    总结来说,重载、重构和重写是C#中非常重要的概念,它们分别涉及方法的命名、代码结构的优化以及继承关系中的方法实现。掌握这些概念有助于编写更高质量的代码,并能够更好地应对未来的需求变化。

    重写和重载的区别

    ### 重写与重载的区别 #### 一、概述 在面向对象编程中,方法的重写(Overriding)和重载(Overloading)是非常重要的概念。这两种机制可以帮助程序员更灵活地管理和组织代码,提高代码的复用性和可扩展性。 ####...

    C++中重载与重写函数区别及虚函数

    ### C++中重载与重写函数的区别及虚函数详解 #### 一、虚函数概述 **1.1 虚函数定义与作用** 在C++中,虚函数是一种特殊的成员函数,它允许子类覆盖父类的行为。虚函数的核心在于实现多态性,即在运行时动态决定...

    Java的重载和重写

    2. 构造方法不能被重写,但可以被覆盖。 3. static方法不能被重写,因为它们不与对象关联,而是与类关联。 4. final方法不能被重写,因为它被声明为不可更改。 5. abstract方法必须在子类中被重写,除非子类也是...

    Java重写和重载概念及区别梳理

    在编程语言中,Java的重写(Override)和重载(Overload)是两个非常重要的概念,它们在类与对象的多态性中起到关键作用。理解并掌握这两个概念是成为一名合格的Java开发者的基础。 首先,我们来谈谈重写(Override...

    java中重载与重写

    重写的关键在于覆盖父类的行为,从而实现多态性。 #### 2. 特点 - **运行时确定**:重写是在运行时确定的,这意味着在运行时,程序会根据对象的实际类型来决定调用哪个版本的方法。 - **必须有继承关系**:为了能够...

    重写(override)和重载(overload)的区别

    在C#编程语言中,重写(Override)和重载(Overload)是两种非常重要的概念,它们分别涉及对象多态性和方法的可选性。理解这两者的区别对于编写高效且易于维护的代码至关重要。 首先,让我们深入了解一下重写(Override)...

    Java中方法重载与重写的区别

    1、重载  方法的重载是同一个类中多态性的一种表现。  方法重载须遵循如下两条规则  (1)方法名相同。  (2)参数列表不同。...  (4)子类方法不能抛出比所覆盖方法更多的异常。  (5)静态方法不存在重

    Java重载和重写的区别--源码实例

    Java中的重载(Overloading)和重写(Overriding)是面向对象编程中的两种关键特性,它们涉及到方法的多态性。理解这两者的区别对于编写高效、可维护的代码至关重要。 **重载(Overloading)**是指在一个类中,可以有多个...

    Java重写与重载(区别与用途)

    我根据我的理解来谈谈Java中重写方法与重载方法的区别。  重写  Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...

    重载、覆盖、多态与函数隐藏

    在面向对象编程中,重载、覆盖、多态和函数隐藏是几个重要的概念,它们共同作用于类的继承体系中,影响程序的行为和扩展性。下面将详细解释这些概念,并通过C++中的代码示例来加深理解。 首先,函数重载...

    [Java]重载重写以及继承多态的区别.doc

    ### Java中的重载、重写、继承与多态 #### 一、重载(Overloading) 在Java中,**重载**是指在一个类内可以有多个名称相同但参数列表不同的方法。这些方法可以通过不同的参数类型、数量或者顺序来进行区分。需要...

    继承与多态,重载和重写

    总结起来,继承、多态、重载和重写是面向对象编程中的核心概念,它们相互关联,共同构建出灵活、可扩展的代码结构。通过继承,我们可以构建类的层次结构,多态则提供了代码的通用性和灵活性。而重载和重写则是实现...

    Java重写重载线程

    ### Java中的方法重载与重写以及线程概念详解 #### 一、方法重载(Overloading) 在Java中,**方法重载**是指在同一个类中定义多个具有相同名称但参数列表不同的方法。这里提到的“参数列表不同”不仅包括参数的...

Global site tag (gtag.js) - Google Analytics