首页 > 其他分享 >方法重载和方法重写

方法重载和方法重写

时间:2024-09-10 19:54:40浏览次数:3  
标签:重写 void 子类 重载 父类 方法

1.方法重载

有时候,类的同一种功能有多种实现方式,到底采用哪种实现方式,取决于调用者给定的参数。例如,杂技师能训练动物,对于不同的动物有不同的训练方式:

public void train(Dog Dog){
    //训练小狗站立、排队、做算术···
}
public void train(Monkey monkey){
    //训练小猴敬礼、翻筋斗、骑自行车···
}

对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。

  重载方法必须满足以下条件:

  1.方法名相同。

  2.方法的参数类型、个数、顺序至少有一项不同。

  3.方法的返回类型可以不相同。

  4.方法的修饰符可以不相同。

在一个类中不允许定义两个方法名相同,并且参数类型、个数、顺序也完全相同的方法。因为假如存在这样的两个方法,Java虚拟机在运行时无法决定到底执行哪个方法。

2.方法重写

假如有100个类,分别为Sub1,.....,Sub100,它们的一个共同行为是写字,除了Sub1用脚写字外,其余的类都用手写字。可以抽象出一个父类Base类,它有一个表示写字的方法write(),那么这方法到底如何实现呢?从尽可能提高代码可复用性的角度,write()方法应该采用适用于大多数子类的实现方式,这样就可以避免在大多数子类中重复定义write()方法。因此Base类的write()方法的定义如下:

public void write(){
    //用手写字···
}

由于Sub1类的写字的实现方式与Base类不一样,因此在Sub1类中必须重新定义write()方法:

public void write(){
    //用脚写字···
}

如果在子类中定义的一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法重写了父类的方法。

重写方法必须满足多种约束,如下:

1.子类方法的名称、参数签名和返回类型;必须与父类方法的名称、参数签名和返回类型一致。

2.子类方法不能缩小父类方法的访问权限。

3.子类方法不能抛出比父类方法更多的异常,子类方法抛出的异常必须和父类方法抛出的异常相同,或者子类方法抛出的异常类是父类方法抛出的异常类的子类。

4.方法重写只存在于子类和父类之间。在同一个类中方法只能被重载,不能被重写。

5.父类的静态方法不能被子类重写为非静态方法,并且父类的非静态方法不能被子类重写为静态方法

6.父类的私有方法不能被子类覆盖。

7.父类的抽象方法可以被子类通过两种途径重写:一是子类重写父类的抽象方法;二是子类重新声明父类的抽象方法,例如一下代码合法:

public abstract class Base{
    abstract void method1();
    abstract void method2();
}
public abstract class Sub extends Base{
    public void method1(){···}//实现method1()方法,并且扩大了访问权限
    public abstract void method2();//重新声明method2()方法,仅仅扩大访问权限,但不实现
}

8.父类的非抽象方法可以被重写为抽象方法。

3.方法重写与方法重载的异同

相同点:

1.都要求方法同名

2.都可以用于抽象方法和非抽象方法之间

不同点:

1.方法重写要求参数签名必须一致,而方法重载要求参数签名必须不一致

2.方法重写要求返回类型必须一致,而方法重载对此不作限制

3.方法重写只能用于子类重写父类的方法,方法重载用于同一个类的所有方法

4.方法重写对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制

5.父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次

标签:重写,void,子类,重载,父类,方法
From: https://blog.csdn.net/xiaojinyu0116/article/details/141869018

相关文章

  • leetcode day06 动态规划之解码方法I和II
    91.解码方法该题类似于爬楼梯方法一:动态规划对于给定的字符串s,设它的长度为n,其中的字符从左到右依次为s[1],s[2],⋯,s[n]。我们可以使用动态规划的方法计算出字符串s的解码方法数。具体地,设f i 表示字符串s的前i个字符s[1..i]的解码方法数。在进行状态转移......
  • 如何将mp4转为mp3音频?4个方法详细分享给你
    将MP4视频转换为3GP视频的方法,对于许多用户来说是一个实用的需求,尤其是在需要将视频文件传输到老旧手机或特定设备上时。以下是几种常见且高效的转换方法,旨在帮助用户轻松完成视频格式的转换。方法一:使用【汇帮视频格式转换器】步骤一:选择并安装软件首先,用户需要在电脑上下载......
  • 线程池以及详解使用@Async注解异步处理方法
    目录一.什么是线程池:二.使用线程池的好处:三.线程池的使用场景:四.使用线程池来提高Springboot项目的并发处理能力:1.在application.yml配置文件中配置:2.定义配置类来接受配置文件内的属性值:3.启用异步支持:4.实例: 五.详细解析@Async注解的使用:1.@Async注解作用:2.@Asyn......
  • STM32获取温度3种方法
    在STM32微控制器上直接获取CPU温度并不像在一些包含内置温度传感器的高端微处理器(如某些ARMCortex-A处理器)上那样直接。STM32微控制器通常不内置专门的温度传感器。不过,你可以通过几种方法来估算或测量与CPU温度相关的数据。方法一:外部温度传感器添加温度传感器:使用如DS1......
  • 14个使用AI进行社交媒体创作和管理的简单方法
    管理一个企业的社交媒体账户可能是一项耗时的工作。每当你要发布一个有趣的视频或创意活动时,都会遇到深夜的提示或紧急的私信需要处理。但你可以利用AI来让你的工作更轻松——并且让结果更好。这里我们分享14种方法,帮助你利用AI进行社交媒体内容创建和管理。目录为什么你需要......
  • 【深度学习 transformer】基于Transformer的图像分类方法及应用实例
    近年来,深度学习在图像分类领域取得了显著成果。其中,Transformer模型作为一种新型的神经网络结构,逐渐在图像分类任务中崭露头角。本文将介绍Transformer模型在图像分类中的应用,并通过一个实例展示其优越性能。一、引言图像分类是计算机视觉领域的一个重要任务,广泛应用于安......
  • 计算字符字数的几种实用方法
    在写作和编辑过程中,字符和字数的统计常常是不可避免的任务。不论是撰写学术论文、博客文章还是社交媒体更新,准确计算字数和字符数都能帮助我们更好地管理内容。今天,我将分享几种实用的计算字符和字数的方法,帮助你提高工作效率。1.使用在线字符计算器最简单直接的方式之一是使用......
  • array数组对象以及常用方法
    数组(Array)是一种数据结构,用于存储具有相同类型的数据元素的有序集合。1.定义数组//通过字面量方式定义数组:let 数组名=[值,值,值];letnumbers=[1,2,3,4,5];//通过构造函数定义数组:let数组名=newArray(值,值,值);(newArray()是固定写法)letfr......
  • 超好用的idea插件,不需要写代码入口也能调用方法
    插件名:QuickRun在开发过程中,快速测试和运行特定的Java方法可以大大提高工作效率。现在,有了QuickRun插件,您可以轻松实现这一目标!插件特点:一键运行:只需右键点击您想要调用的方法,选择“RunMethod”,即可快速执行,无需繁琐的配置。提高效率:无论是调试还是测试,QuickRun让您可以即时......
  • PLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)IEC61131-3FB系统内置方法FB_init隐式或显式初始化功能块,第一次下载运行程序时初始化时自动调用。该方法类似于C#类的构造函数,用于初始化类。FB_exit在功能块被销毁时......