首页 > 其他分享 >重载和重写的区别

重载和重写的区别

时间:2024-11-11 16:19:19浏览次数:1  
标签:区别 重写 修饰符 子类 重载 父类 方法

 

重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们在实现多态性时起着关键作用,但两者之间有明显的区别:

  1. 定义上的区别:
  • 重载(Overloading) 指的是在同一个类中可以有多个方法名相同,但这些方法的参数列表(参数的个数、类型或顺序)不同,或者是方法的返回类型在Java中对此并不影响重载,但其他语言如C++中重载还可以基于返回类型的不同。重载是编译时多态(静态多态)的一个体现。
  • 重写(Overriding) 发生在子类和父类之间,子类定义了一个与父类中同名、同参数列表、同返回类型的方法,并且访问权限不能低于父类中的方法。重写是运行时多态(动态多态)的一个重要体现,需父类方法使用 ​​virtual​​(C++)或不加访问修饰符(Java中默认为 ​​virtual​​)。
  1. 规则上的区别:
  • 重载 的方法可以有不同的返回类型,可以有不同的访问修饰符(尽管通常最好保持一致),并且可以抛出不同的异常类型。
  • 重写 的方法必须与父类方法有相同的返回类型(或者是其子类型,但通常遵循协变返回类型原则),访问修饰符的限制必须大于等于父类(即不能比父类更严格),且不能抛出新的检查异常或者比父类方法声明的异常更广泛的检查型异常。
  1. 类的关系上的区别:
  • 重载 是同一个类内部方法之间的关系,是一种横向扩展,体现了类接口的多样性。
  • 重写 是子类与父类之间的一种关系,是一种纵向的替换或特化,体现了类行为的继承与变化。
  1. 发生时机上的区别:
  • 重载 是编译时决定的,由编译器根据调用方法时提供的参数类型和数量来选择正确的方法版本。
  • 重写 是在运行时根据对象的实际类型来决定调用哪个方法,这是通过动态绑定(或称为晚期绑定)实现的。

重载:必须有不同的参数列表;可以有不同的访问修饰符;可以抛出不同的异常;

重写:参数列表必须要与被重写的相同;返回的类型必须保持一致;修饰符和抛出的异常不能在被重写的方法之外

重写是父类与子类的关系,是垂直关系;重载是同一个类方法中的关系,是水平关系。

总结:

1.定义:重载是在同一个类中定义多个具有相同名称但不同参数的方法;重写是子类对父类中已有方法的重新实现。

2.参数列表:重载方法的参数列表必须不同;重写方法的参数列表必须相同。

3.绑定时机:重载是在编译时静态绑定;重写是在运行时动态绑定。

4.所属关系:重载方法在同一个类中;重写方法是子类对父类的方法进行重写。

5.重载:在同一个类中,当方法名相同,形参列表不同的时候  多个方法构成了重载,与修饰符无关,与返回值无关;与抛出异常无关;

6.方法重写:父子类、接口和实现类之间的关系,子类可以重写父类方法,但是参数个数、类型、返回值必须相同。 

标签:区别,重写,修饰符,子类,重载,父类,方法
From: https://www.cnblogs.com/2324hh/p/18540011

相关文章

  • 恒创科技:什么是 RAID 3 ? RAID 3、4 和5之间有什么区别?
    RAID是一种存储数据以提高性能并减少数据丢失的特定技术。您可以根据自己的需求选择多种RAID类型。RAID3是列表中比较有效的类型之一。本文将重点介绍这种特定的RAID技术,并比较RAID3、4和5。RAID3的定义RAID3是一种特定的磁盘配置,用于安全地存储......
  • 泛型中extends和super的区别
    泛型中的​​extends​​​和​​super​​关键字用于设置类型参数的上下界,控制可以传递给泛型类型的参数类型。它们的区别在于限制的方向和用途:1.extends:上界限制:使用​​extends​​关键字定义了一个类型参数的上界,意味着传入的类型必须是指定类型或其子类型。读取......
  • 泛型中extends和super的区别
    泛型中的​​extends​​​和​​super​​关键字用于设置类型参数的上下界,控制可以传递给泛型类型的参数类型。它们的区别在于限制的方向和用途:1.extends:上界限制:使用​​extends​​关键字定义了一个类型参数的上界,意味着传入的类型必须是指定类型或其子类型。读取......
  • String、StringBuffer、StringBuilder的区别
    在Java中,​​String​​​、​​StringBuffer​​​、和​​StringBuilder​​都是用于处理字符串的类,但它们之间存在一些关键差异,主要涉及可变性、线程安全性和性能: 1.String:-不可变性:​​String​​对象一旦被创建,其内容就不能改变。任何对​​String​​的操作,比如拼接......
  • String、StringBuffer、StringBuilder的区别
    在Java中,​​String​​​、​​StringBuffer​​​、和​​StringBuilder​​都是用于处理字符串的类,但它们之间存在一些关键差异,主要涉及可变性、线程安全性和性能: 1.String:-不可变性:​​String​​对象一旦被创建,其内容就不能改变。任何对​​String​​的操作,比如拼接......
  • gcc 1.c和g++ 1.c有什么区别?gcc 1.cpp和g++ 1.cpp有什么区别?GCC和G++有什么区别?
    gcc1.c和g++1.c有什么区别?先假设1.c只有C语言语法,不涉及C++语法,我们利用-E/-S指令对比二者编译过程中的差异。Basedongcc11.4.0andg++11.4.0.#include<stdio.h>intmain(){    shorta=100;    printf("%d",a);    r......
  • gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
    gcc1.c和g++1.c编译阶段有什么区别?借用 gcc1.c和g++1.c有什么区别? 的示例代码,以汇编代码为比较目标,再经过汇编,最后生成ELF文件,三个过程结果均无差异,这个阶段充分证明了c和c++是多么相似。编译到汇编gcc-S1.c-o1.sg++-S1.c-o11.s .file "1.c"......
  • 微服务与SOA区别
    @目录摘要主要讲解区别关系适用场景其他详细帖子转发,供参考摘要主要讲解区别关系适用场景其他详细帖子转发,供参考微服务与SOA区别:↓https://blog.csdn.net/qq_35119422/article/details/81560833......
  • C++中函数定义和函数声明的区别
    这个编译错误提示:Parameter'index'isconst-qualifiedinthefunctiondeclaration;const-qualificationofparametersonlyhasaneffectinfunctiondefinitions意思是,在函数声明(声明函数的原型)中,const 修饰符对参数 index 没有实际效果。const 仅在 函数定义 ......
  • 编程语言哪家强?对比C,C++,Java等语言的区别
    文章目录开始主题前的一些问题语言举例汇编语言C语言C语言比起汇编多了什么东西?编译器的作用是?C++语言C++语言比C语言多了什么?(推荐《深度探索C++对象模型》)C++有什么编程范式?C++语言特性分别是怎样实现?C++编译器的准则与virtual机制?C++的virtual机制如何实现的?跨平台......