【面试干货】Java方法重写的规则

【面试干货】Java方法重写的规则

  • 1、Java方法重写的规则
  • 2、示例代码
  • 3、总结


💖The Begin💖点点关注,收藏不迷路💖

在Java中,方法重写(Overriding)是面向对象编程中的一个核心概念,它允许子类提供一个与父类相同名称、相同参数列表的方法,以实现或修改父类方法的行为。但是,方法重写并不是随意的,它必须遵循一定的规则。

1、Java方法重写的规则

  1. 方法名和参数列表必须完全一致

    重写的方法必须与父类中被重写的方法具有完全相同的方法名和参数列表。参数列表包括参数的类型、顺序和个数。

  2. 返回值类型必须一致或为其子类型

    重写方法的返回值类型必须与被重写方法的返回值类型相同,或者是其子类型。在Java 5及以后的版本中,如果父类方法返回类型是Object,则子类重写该方法时可以返回任何类型的对象。

  3. 构造方法不能被重写

    构造方法(Constructor)用于创建类的对象,不能被重写。子类可以通过调用super()关键字来调用父类的构造方法。

  4. final方法不能被重写

    如果一个方法被声明为final,则它不能被任何子类重写。final方法是一种固定不变的方法,子类不能改变其行为。

  5. static方法不能被重写(但可以被隐藏)
    static方法是属于类的,而不是属于类的实例的。因此,static方法不存在重写,子类中的同名static方法只是隐藏了父类中的同名static方法。这种情况通常被称为方法隐藏(Method Hiding)

  6. 访问权限不能比父类更低

    重写的方法的访问权限(publicprotected、default、private)不能低于被重写方法的访问权限。例如,如果父类中的方法是public的,那么子类中的重写方法也必须是public的。

  7. 重写之后的方法不能抛出更宽泛的异常

    如果父类方法声明了不抛出任何异常,或者抛出了某个特定的异常,那么子类重写该方法时,不能抛出更宽泛的异常。子类可以抛出与父类方法相同的异常,或者不抛出任何异常。

2、示例代码

示例代码包括了一个父类 Parent 和一个子类 Child。在这个示例中,子类 Child 重写了父类 Parent 中的方法 show 和 anotherMethod。

package com.example;

import java.io.IOException;

// 父类 Parent
class Parent {
    // 父类方法 show
    public void show() {
        System.out.println("父类 show 方法");  // 输出 "父类 show 方法"
    }

    // 父类方法 anotherMethod,声明可能抛出 IOException
    // 注意:这里并没有实际抛出 IOException,只是声明可能会抛出
    public void anotherMethod() throws IOException {
        System.out.println("父类 anotherMethod 方法(未抛出 IOException)"); // 输出 "父类 anotherMethod 方法(未抛出 IOException)"
    }
}

// 子类 Child 继承自 Parent
class Child extends Parent {
    // 重写父类的 show 方法
    @Override
    public void show() {
        System.out.println("子类 show 方法");  // 输出 "子类 show 方法"
    }

    // 重写父类的 anotherMethod 方法,遵循相同的异常签名
    // 注意:这里也没有实际抛出 IOException,只是保持与父类方法相同的声明
    @Override
    public void anotherMethod() throws IOException {
        // 调用父类的 anotherMethod 方法
        super.anotherMethod();
        // 在这里可以添加子类特有的逻辑
        System.out.println("子类 anotherMethod 方法"); // 输出 "子类 anotherMethod 方法"
    }

    // 提供一个 main 方法来测试这两个类
    public static void main(String[] args) {
        // 创建父类对象
        Parent parent = new Parent();
        // 创建子类对象
        Child child = new Child();

        // 调用父类的 show 方法
        parent.show();
        // 调用子类的 show 方法(注意,虽然调用的是子类对象的方法,但由于是重写,所以输出会是 "子类 show 方法")
        child.show();

        try {
            // 调用父类的 anotherMethod 方法(由于未实际抛出 IOException,所以不会进入 catch 块)
            parent.anotherMethod();
            // 调用子类的 anotherMethod 方法(同样,由于未实际抛出 IOException,所以不会进入 catch 块)
            child.anotherMethod();
        } catch (IOException e) {
            // 如果 anotherMethod 方法实际抛出了 IOException,这里会捕获并处理异常
            // 但在这个示例中,我们不会到达这里
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

3、总结

1、方法重写是Java面向对象编程中的一个重要特性,它允许子类在继承父类的基础上,对父类的方法进行扩展或修改。

2、但是,方法重写必须遵循一定的规则,以确保程序的正确性和可维护性。在设计和实现子类时,我们应该仔细考虑是否需要重写父类的方法,并遵循上述规则进行重写。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

具备智能灵敏度校准并可Pin to Pin替代TSM12的电容式触摸芯片GTX312L

电容式触摸芯片 - GTX312L是一款具有智能灵敏度校准功能的12通道电容式触摸芯片,采用I2C通信协议,对各种噪音和环境的变化可靠性有保障,低功率发动机可以增加产品的使用时间,内部控制寄存器可以使用I2C读写接口。 GTX312L具有内部…

记一次 .NET某机械臂上位系统 卡死分析

一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序会偶发性的卡死一段时间,然后又好了,让我帮忙看下怎么回事?窗体类的程序解决起来相对来说比较简单,让朋友用procdump自动抓一个卡死时的dump&#x…

windows anaconda 安装 Labelme

安装 # 创建环境 conda create -n labelme python3.6 #激活环境 conda activate labelme # 安装依赖 conda install pyqt conda install pillow # 安装labelme conda install labelme3.16.2 # 启动labelme labelme右键选择标注类型,从上到下为多边形(常…

Git分支的状态存储——stash命令的详细用法

文章目录 6.6 Git的分支状态存储6.6.1 git stash命令6.6.2 Git存储的基本使用6.6.3 Git存储的其他用法6.6.4 Git存储与暂存区6.6.5 Git存储的原理 6.6 Git的分支状态存储 有时,当我们在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态&am…

机器学习课程复习——朴素贝叶斯

1. 定义 是一种基于贝叶斯定理与特征条件独立假设的生成式分类方法。 2. 公式 原版公式 简化版公式 由于上述公式无法计算,引入条件独立假设 条件独立版公式 3. 贝叶斯分类器 由上述公式可得贝叶斯分类器 化简为 4. 参数估计 4.1. 极大似然估计 4.2. 学习与分…

电子竞赛5——作息时间控制器

一 . 题目要求 用单片机制作作息时间控制器;用四位数码管显示实时时钟(时、分,24小时制、12小时制),有秒闪,小时十位有零消隐;可用数字键或、-键校时(可快速、-)被校位&…

离线安装zabbix-agent,自制yum源方式安装

1,机器准备 现在有2台机器 机器A,能上网,ip:192.168.10.131; 机器B,不能上网,ip:192.168.10.133。 我想在机器B上面安装zabbix-agent-5.0.42版本。 大致思路 在机器A上面制作好我…

Midjourney和Stable Diffusion哪个更适合商业应用?

midjourney的绘画,在撰写有效的prompt需要精确地定义你想要展现的画面,详细描述越准确,生成出的图片结果也会越吻合你的预期。为了提升你midjourney的写作prompt的技巧,可以通过模仿他人的成功案例,亲自尝试编写&#…

C++ 68 之 类模版作函数的参数

#include <iostream> // #include <cstring> #include <string> using namespace std;template<class T1, class T2> // 可以设置默认的类型值&#xff0c;后面在使用的时候&#xff0c;就不用再指定类型了 class Students08{ public:T1 m_name;T2 m_a…

【昇思25天学习打卡营打卡指南-第一天】基本介绍与快速入门

昇思MindSpore介绍 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 其中&#xff0c;易开发表现为API友好、调试难度低&#xff1b;高效执行包括计算效率、数据预处理效率和分布式训练效率&#xff1b;全场景则指框架…

ICMAN触摸芯片——大金属触摸

ICMAN触摸芯片之大金属触摸 按照工业级别设计 稳定性与抗干扰能力强 单颗芯片支持 1~12按键 可以轻松实现 金属灯触摸方案的触摸开关&#xff0b;无极调光 高性能ICMAN触摸芯片在金属LED触摸台灯的应用

Java23种设计模式(四)

1、备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象&#xff0c;备忘录模式属于行为型模式。 备忘录模式允许在不破坏封装性的前提下&#xff0c;捕获和恢复对象的内部状态。 实现方式 创建备忘录…

反激式开关电源是如何工作的

反激的变压器可以看作一个带变压功能的电感&#xff0c;是一个buck-boost电路。 反击式开关变压器 反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源。“反激”指的是在开关管接通的情况下&#xff0c;当输入为高电平时输出线路中串联的电感为放电状态&#x…

硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决

在计算机世界中&#xff0c;文件系统是数据管理的基石&#xff0c;而NTFS和exFAT无疑是这块基石上的两大巨头。它们各自拥有独特的特点和优势&#xff0c;并在不同的使用场景中发挥着重要作用。 什么是文件系统 文件系统提供了组织驱动器的方法。它规定了如何在驱动器上存储数…

2024/06/18--代码随想录算法8/17| 股票问题

121.买卖股票的最佳时机 力扣链接 动规五部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金,dp[i][1] 表示第i天不持有股票所得最多现金确定递推公式 dp[i][0] max(dp[i-1][0], -price[i]) dp[i][1]max(dp[i-1][1], …

spark独立集群搭建

spark独立集群搭建(不依赖Hadoop) 1、上传spark-2.4.5-bin-hadoop2.7.tgz至 /usr/local/moudel &#xff0c;再解压到 /usr/local/soft tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/soft/ 重命名 mv spark-2.4.5-bin-hadoop2.7/ spark-2.4.5 配…

深入理解计算机系统 CSAPP 家庭作业6.45

CS:APP3e, Bryant and OHallaron 可以参考这里

mediasoup源码分析(三)channel创建及信令交互

mediasoup源码分析--channel创建及信令交互 概述跨职能图业务流程图代码剖析 概述 在golang实现mediasoup的tcp服务及channel通道一文中&#xff0c;已经介绍过信令服务中tcp和channel的创建&#xff0c;本文主要讲解c中mediasoup的channel创建&#xff0c;以及信令服务和medi…

深圳比创达电子EMC|EMC与EMI滤波器:守护电子设备的电磁防火墙

随着科技的飞速发展&#xff0c;电子设备在我们日常生活中的普及率越来越高&#xff0c;从智能手机到大型工业设备&#xff0c;无一不体现出电子技术的重要地位。然而&#xff0c;随之而来的电磁兼容性问题&#xff08;EMC&#xff09;和电磁干扰问题&#xff08;EMI&#xff0…

基于稀疏学习现代信号处理方法的旋转机械故障诊断(MATLAB)

通过对滚动轴承故障诊断研究现状及稀疏表示方法在滚动轴承故障诊断领域中应用现状的调研&#xff0c;发现稀疏表示方法与故障特征提取和故障分类的关联&#xff0c;针对故障诊断问题&#xff0c;通过构造合理的故障稀疏表示模型&#xff0c;选取适合的模型优化算法&#xff0c;…