java面试基础 -- 方法重载 方法重写

目录

重载

重写 


重载

         方法的重载是指在同一个类中定义多个方法, 他们具有相同的名称, 但是具有不同的参数列表, 例如:

public void myMethod(int arg1) {// 方法体
}public void myMethod(int arg1, int arg2) {// 方法体
}public void myMethod(String arg1) {// 方法体
}

        此处我们看到三个不同参数的, 但是具有相同返回值和方法名的方法.

有如下测试案例:

public class Test {public static void main(String[] args) {Test_class test = new Test_class();test.myMethod(1);test.myMethod(1,2);test.myMethod("i love you");}
}class Test_class {public void myMethod(int arg1) {System.out.println("参数为 int arg1");}public void myMethod(int arg1, int arg2) {System.out.println("参数为 int arg1  和 int arg2");}public void myMethod(String arg1) {System.out.println("参数为 String arg1");}}

运行结果为:

 我们将其中一个myMethod方法的返回值改为int类型:

对其结果并无影响, 重载的返回类型可以相同也可以不相同, 返回类型不做要求.

也就是说每个重载的方法, 都必须要有一个独一无二的参数列表, 而返回类型不做要求.

例如有如下两个重载的方法:

public String myMethod(int arg1) {// 方法体
}public int myMethod(int arg1) {// 方法体
}

他们具有相同的方法名, 相同的参数, 但是具不同的返回类型, 调用方法:

myMethod(1);

因为不同的返回值类型, JVM没办法分别到底要调用哪一个方法;

更深层次的原因: JVM调用方法是通过方法签名来判断到底要调用那个方法的, 什么是方法签名?? 方法签名 == 方法名称 + 参数个数 + 以及每个参数他们的参数类型 组成的一个唯一值, 这个唯一值就是方法签名, 从方法签名可以看出来, 返回类型不是签名的组成部分, 因此不同的返回类型不能作为是否重载的标志, 所以JVM也就无法确定要调用哪个方法了.

访问修饰限定符 是否对重载有影响?? 

 方法重载对方法的访问权限没有特定的要求。在Java中,方法的访问权限可以是public、protected、private或者默认(即不声明任何访问修饰符),而方法重载只是指在同一个类中定义了多个方法名相同但参数列表不同的方法。因此,方法重载并不会对方法的访问权限有任何限制

无论是public、protected、private还是默认访问权限的方法,都可以进行重载。重载的方法可以拥有不同的访问权限,只要符合各自的访问权限规则即可。例如,一个public的方法可以与一个private的方法重载,或者一个protected的方法可以与一个默认访问权限的方法重载。

需要注意的是,对于继承关系中的子类来说,如果子类要重载父类中的方法,那么子类中重载的方法的访问权限不能低于父类中被重载的方法的访问权限。这是由于子类要继承并覆盖父类的方法,如果降低访问权限可能会破坏封装性。

public class Test {public static void main(String[] args) {Dog dog = new Dog();dog.action();dog.action(5);dog.action("小黑");}
}class Animal {public void action() {System.out.println("动物发出叫声");}
}class Dog extends Animal{@Overridepublic void action() {System.out.println("小狗:汪汪汪");}protected void action(String name) {System.out.println(name + " : 汪汪汪");}public int action(int age) {System.out.println("the dog'age is " + age);return 1;}
}

 

此代码中, public void action() {} 继承了父类中的action, 然后子类中对继承并重写的action方法进行重载, 如上: 



重写 

         子类在继承父类后并不只是拥有了父类的属性, 还可以对父类的属性进行拓展, 即对父类的成员方法进行重写.

        了解一下重写是怎么来的?? 

        这里有一个animal类, 他是所有动物的父类, 这个animal类具有一个行为方法, 叫做action(), animal类可以派生很多子类, 例如说 dog类, cat 类等等, 我们抽象出来的代码如下:

public class Test {public static void main(String[] args) {Dog dog = new Dog();dog.action();Cat cat = new Cat();cat.action();}
}class Animal {public void action() {System.out.println("动物发出叫声");}
}class Dog extends Animal{// null
}class Cat extends Animal {// null
}

        可以看出来, Animal这个类里面的action方法, 可以泛指很多种动物的叫声, 只要是继承了这个Animal类的都可以, 但是仅仅只是泛指还不够, 例如我们在小狗就是旺旺叫, 小猫就是喵喵叫, 这就显得不够灵活. 所以只是使用父类的action 方法, 不足以显示出子类的特性, 所有我们就需要把这个父类继承过来的方法进行重写:

public class Test {public static void main(String[] args) {Dog dog = new Dog();dog.action();Cat cat = new Cat();cat.action();}
}class Animal {public void action() {System.out.println("动物发出叫声");}
}class Dog extends Animal{public void action() {System.out.println("小狗 : 汪汪汪");}
}class Cat extends Animal {public void action() {System.out.println("小猫: 喵喵喵");}
}

 对比如重载, 我们可以思考一下, 重写对于返回值, 参数类型, 或者是权限修饰符??

规则:

  • 参数列表必须完全与被重写方法相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
  • 访问权限不能比父类中被重写的方法访问权限更低;
  • 父类的成员方法只能被它的子类重写;
  • 声明为final的方法不能被重写;
  • 声明为static的方法不能被重写;
  • 构造方法不能被重写;

 

 

 

 

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

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

相关文章

软硬件免费,服务收费:网络安全商业模式正在被颠覆

大数据产业创新服务媒体 ——聚焦数据 改变商业 从元宇宙到造汽车,重回国内A股市场五年的360一路苦追热点。一直到大模型横空出世,360才算真正找到感觉,经历一次战略上的回归。 在8月9日的互联网安全大会上,一袭红衣的红衣教主周…

财务数据分析之现金流量表模板分享

现金流量表是我们常说的财务数据分析三表之一。它可以呈现一个企业的现金流情况,揭示企业经营管理健康状态,但在实际使用中却有总给人一种用不上、用不好的矛盾感。怎么才能把现金流量表做好?不如借鉴下大神的现金流量表模板。 下面介绍的是…

Docker 本地镜像发布到私有仓库

1. 本地镜像发布到私有库流程 2. 是什么 1 官方Docker Hub地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。 2 Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜…

基于Gradio的GPT聊天程序

网上很多别人写的,要用账号也不放心。就自己写了一个基于gradio的聊天界面,部署后可以本地运行。 特点: 可以用openai的,也可以用api2d,其他api可以自己测试一下。使用了langchain的库 可以更改模型,会的…

使用插件实现pdf,word预览功能

效果 代码&#xff1a; 插件地址&#xff1a; https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…

MySQL卸载并重装指定版本

MySQL卸载并重装制定版本 学习新的项目&#xff0c;发现之前的Navicat已经失去了与现有MySQL的链接&#xff0c;而且版本也不适合&#xff0c;为了少走弯路&#xff0c;准备直接重装相应版本的MySQL 卸载现有MySQL 停止windows的MySQL服务&#xff0c;【windowsR】打开运行框…

【ChatGPT 指令大全】怎么使用ChatGPT来辅助知识学习

目录 概念解说 简易教学 深度教学 教学与测验 解释一个主题的背后原理 总结 在当今信息时代&#xff0c;互联网的快速发展为我们获取知识提供了前所未有的便利。而其中&#xff0c;人工智能技术的应用也为我们的学习和交流带来了新的可能性。作为一种基于自然语言处理的人…

2023年国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

HDFS原理剖析

一、概述 HDFS是Hadoop的分布式文件系统&#xff08;Hadoop Distributed File System&#xff09;&#xff0c;实现大规模数据可靠的分布式读写。HDFS针对的使用场景是数据读写具有“一次写&#xff0c;多次读”的特征&#xff0c;而数据“写”操作是顺序写&#xff0c;也就是…

maven install

maven install maven 的 install 命令&#xff0c;当我们的一个 maven 模块想要依赖其他目录下的模块时&#xff0c;直接添加会找不到对应的模块&#xff0c;只需要找到需要引入的模块&#xff0c;执行 install 命令&#xff0c;就会将该模块放入本地仓库&#xff0c;就可以进…

机器学习基础之《分类算法(1)—sklearn转换器和估计器》

一、转换器 1、什么是转换器 之前做特征工程的步骤&#xff1a; &#xff08;1&#xff09;第一步就是实例化了一个转换器类&#xff08;Transformer&#xff09; &#xff08;2&#xff09;第二步就是调用fit_transform&#xff0c;进行数据的转换 2、我们把特征工程的接口称…

EthGlobal 巴黎站 Chainlink 获奖项目介绍

在 Web3 中&#xff0c;每一周都至关重要。项目的发布、版本的发布以及协议的更新以惊人的速度推出。开发者必须保持学习&#xff0c;随时了解最新的工具&#xff0c;并将所有他们所学的东西&#xff08;无论是旧的还是新的&#xff09;联系起来&#xff0c;以构建推动 Web3 技…

时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积…

首发 | FOSS分布式全闪对象存储系统白皮书

一、 产品概述 1. 当前存储的挑战 随着云计算、物联网、5G、大数据、人工智能等新技术的飞速发展&#xff0c;数据呈现爆发式增长&#xff0c;预计到2025年中国数据量将增长到48.6ZB&#xff0c;超过80%为非结构化数据。 同时&#xff0c;数字经济正在成为我国经济发展的新…

2023年国赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

OpenCV实例(八)车牌字符识别技术(二)字符识别

车牌字符识别技术&#xff08;二&#xff09;字符识别 1.字符识别原理及其发展阶段2.字符识别方法3.英文、数字识别4.车牌定位实例 1.字符识别原理及其发展阶段 匹配判别是字符识别的基本思想&#xff0c;与其他模式识别的应用非常类似。字符识别的基本原理就是对字符图像进行…

【佳佳怪文献分享】MVFusion: 利用语义对齐的多视角 3D 物体检测雷达和相机融合

标题&#xff1a;MVFusion: Multi-View 3D Object Detection with Semantic-aligned Radar and Camera Fusion 作者&#xff1a;Zizhang Wu , Guilian Chen , Yuanzhu Gan , Lei Wang , Jian Pu 来源&#xff1a;2023 IEEE International Conference on Robotics and Automat…

【Mariadb高可用MHA】

目录 一、概述 1.概念 2.组成 3.特点 4.工作原理 二、案例介绍 1.192.168.42.3 2.192.168.42.4 3.192.168.42.5 4.192.168.42.6 三、实际构建MHA 1.ssh免密登录 1.1 所有节点配置hosts 1.2 192.168.42.3 1.3 192.168.42.4 1.4 192.168.42.5 1.5 192.168.42.6 …

【深入理解ES6】块级作用域绑定

1. var声明及变量提升机制 提升&#xff08;Hoisting&#xff09;机制&#xff1a;通过关键字var声明的变量&#xff0c;都会被当成在当前作用域顶部生命的变量。 function getValue(condition){if(condition){var value "blue";console.log(value);}else{// 此处…

2. 获取自己CSDN文章列表并按质量分由小到大排序(文章质量分、博客质量分、博文质量分)(阿里云API认证)

文章目录 写在前面步骤打开CSDN质量分页面粘贴查询文章url按F12打开调试工具&#xff0c;点击Network&#xff0c;点击清空按钮点击查询是调了这个接口https://bizapi.csdn.net/trends/api/v1/get-article-score用postman测试调用这个接口&#xff08;不行&#xff0c;认证不通…