Java基础篇--重写(Override)与重载(Overload)

news2025/1/16 5:52:47

目录

重写(Override)

重写(override)的规则:

重载(Overload)

重载(overload)的规则:

示例代码

重写与重载之间的区别

总结 


在Java中,重写(Override)和重载(Overload)是两个不同的概念,用于实现多态性和灵活地处理不同的方法调用。

重写(Override)

重写(Override)指的是子类重新定义了父类中已经存在的方法。重写要求子类方法与父类方法具有相同的函数名、返回类型和参数列表,但可以有不同的方法实现。在运行时,如果通过父类引用调用被子类重写的方法,实际上会执行子类中的方法实现。重写允许子类扩展或修改继承自父类的方法行为。

重写(override)的规则:

  1. 参数列表与被重写方法的参数列表必须完全相同。
  2. 返回类型可以是被重写方法的返回类型的子类(在 Java 5 及更早版本要求返回类型一致,Java 7 及更高版本允许不一致)。
  3. 访问权限不能低于被重写方法的访问权限。父类方法为 public,则子类重写方法至少为 public 或 protected。若父类方法为 protected,则子类重写方法不能为 private。
  4. 仅有父类成员方法才能被重写。static 方法和 final 方法不能被重写了。但是,可以再次声明 static 方法或 final 方法。
  5. 如果子类和父类在同一个包中,子类可以重写父类的所有方法,除了声明为 private 和 final 的方法。
  6. 如果子类和父类不在同一个包中,子类只能重写父类声明为 public 和 protected 的非 final 方法。
  7. 重写的方法可以抛出任何非强制异常,但不得抛出比被重写方法声明的更广泛的强制异常。
  8. 构造方法不能被重写。

需要注意的是,如果一个类是不能被继承的(比如声明为 final 或是位于不可访问的上下文中),那么它的方法也不能被重写。

当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,Java提供了super关键字,super关键字可以在子类中调用父类的普通属性、方法以及构造方法。

重载(Overload)

重载(Overload)指的是在同一个类中定义了多个具有相同函数名但参数列表不同的方法。重载方法可以有不同的返回类型,但不能仅仅依靠返回类型来区分重载方法。在编译时,编译器根据方法调用时的参数类型和数量来确定调用哪个重载方法。

重载(overload)的规则:

  1. 被重载的方法必须改变参数列表,即参数的个数或类型不一样。
  2. 被重载的方法可以改变返回类型,但不能以返回类型作为唯一的区分标准。重载方法需要在参数列表上有明显的区别。
  3. 被重载的方法可以改变访问修饰符,即可以是 public、protected、或者默认访问权限(没有修饰符)。
  4. 被重载的方法可以声明新的或更广的检查异常,即可以抛出新的或父类抛出异常的子类型异常。
  5. 重载方法可以在同一个类中定义,也可以在子类中定义。

需要注意的是,返回值类型无法作为重载函数的区分标准,因为在调用时编译器只根据参数列表来确定具体调用哪个重载方法。

示例代码

下面是一个关于重写和重载的示例代码:

// 父类 Animal
class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

// 子类 Dog 继承自父类 Animal
class Dog extends Animal {
    // 方法重写
    @Override
    public void makeSound() {
        System.out.println("狗在汪汪叫");
    }

    // 方法重载
    public void makeSound(int times) {
        for (int i = 0; i < times; i++) {
            System.out.println("狗在汪汪叫,第 " + (i + 1) + " 声");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound(); // 输出:动物发出声音

        Dog dog = new Dog();
        dog.makeSound(); // 输出:狗在汪汪叫

        dog.makeSound(3);
        /*
        输出:
        狗在汪汪叫,第 1 声
        狗在汪汪叫,第 2 声
        狗在汪汪叫,第 3 声
        */
    }
}

重写与重载之间的区别

区别点方法重载方法重写
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)

总结 

方法的重写和重载是Java中多态性的不同表现形式。重载是一个类中定义多个方法名相同但参数数量、类型或次序不同的情况,而重写是子类存在与父类方法名相同、参数个数、类型和返回值均相同的方法。

  1. 方法重载是一种静态多态性,主要通过在编译时根据方法的参数来确定调用哪个重载方法。方法重载允许在同一个类中定义具有相同名称但不同参数的多个方法,提供了更灵活和方便的方法调用方式。
  2. 方法重写是一种动态多态性,通过父类和子类的关系,子类可以重写继承自父类的方法,实现方法的多态性。在运行时根据对象的实际类型来决定调用哪个重写方法,具有更灵活和多样化的行为。

总结来说,方法重载是静态的,通过参数进行区分;方法重写是动态的,通过继承关系和运行时的实际类型进行区分。两者共同展现了Java语言中的多态性机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理

Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理 目录 Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、实现步骤 五、关键代码 一、简…

港科夜闻|香港科大(广州)与南沙科金控股签订战略合作协议,为南沙创新生态与高质量发展提供持续强劲动力...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大(广州)与南沙科金控股签订战略合作协议&#xff0c;为南沙创新生态与高质量发展提供持续强劲动力。双方将以此为契机&#xff0c;立足自身资源优势&#xff0c;完善合作机制&#xff0c;深化合作领域&#xff0c…

MOM or MES:如何选择适合工厂的制造管理系统?

在现代制造业中&#xff0c;有效的制造管理系统对于工厂的生产效率和竞争力至关重要。这衍生出来了两个常见的解决方案&#xff1a;MOM&#xff08;Manufacturing Operations Management&#xff09;制造管理系统和MES&#xff08;Manufacturing Execution System&#xff09;制…

无涯教程-Perl - socketpair函数

描述 此函数使用PROTOCOL在指定的DOMAIN(指定的TYPE)中创建一对未命名的连接Socket。如果未实现系统socketpair()函数,则将导致致命错误。 语法 以下是此函数的简单语法- socketpair SOCKET1, SOCKET2, DOMAIN, TYPE, PROTOCOL返回值 如果失败,此函数返回0,如果成功,则返回…

基于STM32CUBEMX驱动TMOS模块STHS34PF80(5)----配置嵌入式函数

基于STM32CUBEMX驱动TMOS模块STHS34PF80----4.中断获取信号 概述样品申请视频教程参考Demo参考Demo内嵌函数地址串口配置IIC配置IO口设置串口重定向参考程序初始化IIC写函数IIC读函数获取ID设备的自动引导过程和关机模式配置省电模式温度数据的灵敏度值设置低通滤波器温度测量滤…

Java算法_ 反转二叉树(LeetCode_Hot100)

题目描述&#xff1a;给你一棵二叉树的根节点 &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。root。 获得更多&#xff1f;算法思路:代码文档&#xff0c;算法解析的私得。 运行效果 完整代码 /*** 2 * Author: LJJ* 3 * Date: 2023/8/16 13:18* 4*/public class In…

无涯教程-Perl - split函数

描述 此函数根据PATTERN指定的分隔符将字符串表达式拆分为多个字段。如果未指定任何模式,则默认为空白。可选限制限制了返回的元素数。 负限制与无限制具有相同的作用。此函数通常与join()结合使用以创建小型文本数据库。 语法 以下是此函数的简单语法- split /PATTERN/, …

每天一道leetcode:1218. 最长定差子序列(动态规划中等)

今日份题目&#xff1a; 给你一个整数数组 arr 和一个整数 difference&#xff0c;请你找出并返回 arr 中最长等差子序列的长度&#xff0c;该子序列中相邻元素之间的差等于 difference 。 子序列 是指在不改变其余元素顺序的情况下&#xff0c;通过删除一些元素或不删除任何…

mavros源码安装与配置

0 背景 Ubuntu20.04 双系统 ROS Noetic Mavros本质上是ROS的一个功能包&#xff0c;因为笔者需要对其进行二次开发&#xff0c;所以选择源码安装。 参考&#xff1a;官方repository链接&#xff0c;官方安装文档 1 安装步骤 首先&#xff0c;确保安装了catkin相关工具 # f…

防御DDoS服务应如何选择?一文全面讲透

最近人人都在谈论 DDoS&#xff0c; DDoS攻击不仅会损害受害者的金钱、服务和信誉&#xff0c;伴随着互联网的快速发展&#xff0c;它的防御难度相当大。报告显示&#xff0c;65%以上的DDoS攻击每小时给受害企业造成的损失高达一万美金。那么如何为企业构建全面的应对策略&…

Java:PO、VO、BO、DO、DAO、DTO、POJO

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Java&#xff1a;PO、VO、BO、DO、DAO、DTO、POJO PO持久化对象&#xff08;Persistent Object&#xff09; PO是持久化对象&#xff0c;用于表示数据库中的实体或表…

Iridient Developer for mac RAW图像调整

Iridient Developer 支持多种不同的文件格式&#xff0c;包括常见的RAW格式&#xff0c;如CR2、NEF、RAF等&#xff0c;以及JPEG、TIFF等。它具有非常精确的图像处理引擎&#xff0c;能够提供高质量的图像细节和色彩还原。 该软件提供了丰富的调整选项&#xff0c;包括曝光、白…

GRPC 链接 NODE 和 GOLANG

GRPC 链接 NODE 和 GOLANG GRPC 了解 什么是GRPC gRPC 采用了 Protocol Buffers 作为数据序列化和反序列化的协议&#xff0c;可以更快速地传输数据&#xff0c;并支持多种编程语言的跨平台使用gRPC 提供“统一水平层”来对此类问题进行抽象化。 开发人员在本机平台中编写专…

idea git命令使用

这个标签标识单签分支&#xff1a;&#xff08;标签图标&#xff09; 标识关联分支&#xff1a;&#xff08;五角星&#xff09; 本地切换分支&#xff1a;如当前分支是dev ,git branch 显示的是dev ,然后通过 git checkout -b release 切换到release分支 git checkout re…

JUC并发集合

目录 传统类集框架的弊端 1.并发集合的类型 2.并发单值集合 3.并发多值集合 4.跳表集合 传统类集框架的弊端 传统的类集框架存在一个非常严重的弊端。那就是在多线程的情况下对集合修改会报错。 如下代码 package Example2123;import java.util.ArrayList; import jav…

easyx图形库基础4:贪吃蛇

贪吃蛇 一实现贪吃蛇&#xff1a;1.绘制网格&#xff1a;1.绘制蛇&#xff1a;3.控制蛇的默认移动向右&#xff1a;4.控制蛇的移动方向&#xff1a;5.生成食物6.判断蛇吃到食物并且长大。7.判断游戏结束&#xff1a;8.重置函数&#xff1a; 二整体代码&#xff1a; 一实现贪吃蛇…

今年七夕情人节,要送数码产品给对象?这几款送人不出错的数码产品

时间过的还挺快的又到了今年的七夕情人节了&#xff0c;你是否还在为送什么数码产品给对象而犯愁&#xff1f;做过功课挑选的数码好物肯定会让TA十分惊喜&#xff0c;作为一个数码发烧友&#xff0c;我盘点了几款适合送对象的数码好物&#xff0c;大家可以甄选看看。 第一款&a…

LeetCode--HOT100题(32)

目录 题目描述&#xff1a;138. 复制带随机指针的链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;138. 复制带随机指针的链表&#xff08;中等&#xff09; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &…

【C++】位图与布隆过滤器(内含相关高频面试题)

本篇文章会对位图和布隆过滤器进行详解。同时还会给出位图和布隆过滤器相关的高频面试题与解答。希望本篇文章会对你有所帮助。 文章目录 一、位图的引入 1、1 查找整数&#xff08;腾讯面试题&#xff09; 1、2 解决方法1 1、3 解决方法2 1、3、1 外部排序 二、位图的原理与…

电压调整器之LDO稳压器电路 士兰微SA1117B系列SA1117BH-ADJTR

关于LDO调节器&#xff08;Low Dropout Regulator&#xff09;是一种电压稳压器件&#xff0c;常用于电子设备中&#xff0c;用于将高电压转换为稳定的低电压。它能够在输入电压和输出电压之间产生较小的差异电压&#xff0c;因此被称为"低压差稳压器"。 LDO调节器通…