【面试干货】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…

springboot-自动配置

一、自动配置的原理 Spring Boot 的自动配置基于以下几个核心概念: 条件注解 (Conditional Annotations):Conditional 系列注解用于根据特定条件判断是否加载某个配置类或 Bean。 自动配置类 (Auto-configuration Classes):这些类通过 META-…

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

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

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

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

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

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

React.FC`<ChildComponentProps>`解释

代码场景 ParentComponent.tsx import React, { useState } from react; import ChildComponent from ./ChildComponent;function ParentComponent() {const [childData, setChildData] useState<string>();const handleChildData (data: string) > { // 可以直接…

MyBatis的缓存功能总结

MyBatis的缓存功能总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 缓存概述 MyBatis的缓存功能是为了提高数据库访问效率而设计的。通过缓存&#xff…

Netty中Reactor线程的运行逻辑

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

【八股系列】怎么处理项目中的异常捕获行为?(js)

文章目录 1. 基本的try-catch-finally结构2. 全局异常处理3. 自定义错误类4. 使用Promise的catch5. 异步函数中的try-catch6. 记录日志7. 用户友好的错误提示 在 JavaScript项目中&#xff0c;合理地处理异常捕获对于提高程序的健壮性和用户体验至关重要。以下是一些关键实践和…

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

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

shell脚本内使用ifconfig命令

脚本在定时任务中没有取出ip&#xff0c;说明ifconfig命令没有执行成功&#xff0c;就是没有找到ifconfig&#xff0c;与PATH环境变量有关&#xff0c;PATH环境变量在/etc/profile文件中设置&#xff0c;而定时任务却是以nologin方式调用脚本&#xff0c;不会加载/etc/profile,…

探讨 MyBatis 特殊 SQL 执行技巧与注意事项

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

Zygote进程的理解

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

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

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

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

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

Android使用data uri启动activity或service

设定AndroidManifest.xml 在AndroidManifest.xml文件中&#xff0c;我们可以设定activity或service的data。 <!-- activity定义方式 --> <activityandroid:name".page.main.MainActivity"><intent-filter><action android:name"an…

神经网络模型---ResNet

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