【面试干货】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 {// 父类方法 showpublic 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 方法@Overridepublic void show() {System.out.println("子类 show 方法");  // 输出 "子类 show 方法"}// 重写父类的 anotherMethod 方法,遵循相同的异常签名// 注意:这里也没有实际抛出 IOException,只是保持与父类方法相同的声明@Overridepublic 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.mzph.cn/bicheng/29909.shtml

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

相关文章

结硬寨:联想服务器的向前之路

曾国藩曾经将自己的战略思想,总结为“结硬寨,打呆仗”。 这种稳健的策略,往往在真实的产业发展中能收获奇效。我们喜欢听颠覆性的产业创新,却往往忽视稳扎稳打,把每一个优势聚集起来形成整体优势,可能才是市…

在Python项目中自定义日志工具

在Python项目中自定义日志工具 日志记录是软件开发中的一个关键部分,它可以帮助开发人员调试代码、监控运行状况以及记录重要事件。在Python中,logging 模块提供了强大的日志记录功能。本文将介绍如何创建一个日志工具,使其能够同时将日志输…

【ajax基础02】URL详解

目录 一:什么是URL 二:URL组成 协议 ​编辑 域名(在url中必须写) 资源路径 三:URL查询参数 定义: 语法格式: 如何利用axios实现特定数据查询: 语法格式: 案例&#xff1a…

【耐水好】强耐水UV胶水它的粘接强度和普通UV胶水比如何呢

【耐水好】强耐水UV胶水它的粘接强度和普通UV胶水比如何呢 强耐水UV胶水的粘接强度与普通UV胶水相比,具有显著的优势。以下是详细的比较和归纳: 固化方式: 两者都是通过紫外线(UV)照射进行固化,但强耐水UV…

2024年全球架构师峰会(ArchSummit深圳站)

前言 ArchSummit全球架构师峰会是极客邦科技旗下InfoQ中国团队推出的重点面向高端技术管理者、架构师的技术会议,54%参会者拥有8年以上工作经验。 ArchSummit聚焦业界强大的技术成果,秉承“实践第一、案例为主”的原则,展示先进技术在行业中的…

程序员学CFA——经济学(三)

经济学(三) 总产出、价格水平和经济增长总产出、总收入和总支出总产出、总收入和总支出的概念及联系国内生产总值国内生产总值(GDP)的定义GDP的衡量方法GDP的相关概念GDP的核算方法 总需求、总供给和市场均衡总需求总需求及其假设…

Netty中Reactor线程的运行逻辑

Netty中的Reactor线程主要干三件事情: 轮询注册在Reactor上的所有Channel感兴趣的IO就绪事件。 处理Channel上的IO就绪事件。 执行Netty中的异步任务。 正是这三个部分组成了Reactor的运行框架,那么我们现在来看下这个运行框架具体是怎么运转的~~ 这…

设计模式-结构型-06-桥接模式

1、传统方式解决手机操作问题 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图: UML 类图 问题分析 扩展性问题(类爆炸):如果我们再…

Zygote进程的理解

Zygote进程是安卓系统的一个重要进程,由init进程创建而来;另外系统里的重要进程(system_server等)都是由zygote进程fork的,所有的app进程也是由zygote进程fork的。 一、C 里的fork函数 fork是Linux里面创建子进程的函…

电池荷电状态估计SOC?电池管理系统

一、背景 电池荷电状态(SOC, State of Charge)估计是电池管理系统(BMS, Battery Management System)的关键功能之一,对于确保电池的安全高效运行至关重要,特别是在电动车、储能系统以及便携式电子设备等领…

LCL滤波器并网逆变器双闭环控制系统仿真

并网逆变器通常采用L滤波器,虽然结构和控制简单,但是随着功率级别的增加,体积重量增大等问题也日益突出。为了解决这个问题,人们开始使用LCL滤波器,这种滤波器在功率较大的场合表现出色。 无源滤波器,又称…

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…

Linux 系统图像化编程GTK入门

环境前期准备 演示环境:Windows 11 Ubuntu 22.04.4 VS Code 前提条件:1、Windows 11 子系统Ubuntu 22.04.4 已经安装图形化界面,如果没有安装请参考文章: windows11子系统Ubuntu 22.04.4子安装图形化界面 2、Ubuntu 22.04.4…

C语言笔记第16篇:编译和链接

1、翻译环境和运行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行机器指令(二进制指令) 第2种是执行环境,它用于实际执行代码 2、翻译环境 那翻译环境是怎…

数据资产管理的未来趋势:洞察技术前沿,探讨数据资产管理在云计算、大数据、区块链等新技术下的发展趋势

一、引言 随着信息技术的飞速发展,数据已成为企业最重要的资产之一。数据资产管理作为企业核心竞争力的关键组成部分,其发展趋势和技术创新受到了广泛关注。特别是在云计算、大数据、区块链等新技术不断涌现的背景下,数据资产管理面临着前所…

【凤凰房产-注册安全分析报告-缺少轨迹的滑动条】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

2024 端午节巽寮湾游玩记录

2024 端午节巽寮湾游玩记录 文章目录 2024 端午节巽寮湾游玩记录一、前言二、巽寮湾游玩行程1、三天衣食住行2、主要图片: 三、其他1、小结2、巽寮湾游玩建议3、感慨 一、前言 时间总是过得很快,只要你活着时间就会不停往前走。 所以你以后的路其实都是…

外卖APP开发详解:从同城O2O系统源码开始

近期,从事软件开发的小伙伴们都在讨论外卖APP,热度非常之高,所以小编今天将与大家一同探讨同城O2O系统源码、外卖APP开发。 一、外卖APP开发的前期准备 了解目标用户的需求,分析竞争对手的优劣势,明确自身的市场定位。…

如何在Vue3中处理异步API调用并更新表单数据(附Demo)

目录 前言1. 问题所示2. 知识分析3. 实战 前言 从实战问题中剖析知识点 1. 问题所示 执行Vue3数据的时候&#xff0c;终端输出的data如下所示 Promise {<pending>} [[Prototype]] : Promise [[PromiseState]] : "fulfilled" [[PromiseResult]] : Array(…

【Unity拖拽物体】实现对点中的3D物体进行拖拽的功能

场景结构&#xff0c;两个普通模型 第一种 脚本所挂载的物体才可以被拖拽 【PC鼠标版本】 using UnityEngine;// 这个脚本实现了&#xff0c;本脚本所在的游戏物体能够被拖拽 public class DragObjectT : MonoBehaviour {private Vector3 screenPoint; // 存储物体在屏幕上的位…