重载和重写的区别(详解)

article/2025/11/7 15:51:50

1、方法重写

概念:

重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!

好处:

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

注意:

假如一个父类的一个方法申明了一个检查异常IOException,但是子类再重写父类的方法的时候不能抛出Exception异常,因为Exception是IOException的父类,所以子类方法只能抛出IOException异常或者IOException的子类异常。

方法重写的规则(重要)

  • 参数列表与被重写方法的参数列表必须完全相同。

  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。

  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。

  • 父类的成员方法只能被它的子类重写。

  • 声明为 final 的方法不能被重写。

  • 声明为 static 的方法不能被重写,但是能够被再次声明。

  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。

  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

  • 构造方法不能被重写。(因为子类和父类的类名不同,而构造器的名字要与类名相同,就谈不上继承,也不能重写)

  • 如果不能继承一个类,则不能重写该类的方法。

Super关键字的作用:

当需要在子类中调用父类的重写方法时,需要使用super关键字。

class Animal{public void move(){System.out.println("动物可以移动");}
}ssfsfsfsclass Dog extends Animal{public void move(){super.move(); // 应用super类的方法System.out.println("狗可以跑和走");}
}public class TestDog{public static void main(String args[]){Animal b = new Dog(); // Dog 对象b.move(); //执行 Dog类的方法}
}

运行结果如下:

动物可以移动
狗可以跑和走

2、方法重载(Overload):

概念(重要):

  1. 重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
  2. 每个重载的方法(或者构造函数)都必须有独有的参数类型列表。
  3. 最常见的地方就是构造器的重载。

重载的规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一致)。
  • 被重载的方法可以改变返回类型,也可以不改变。
  • 被重载的方法可以改变访问修饰符。
  • 被重载的方法可以申明新的或者更广的检查异常。
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 不能已返回值类型作为重载方法的区分标准。

实例:

public class Overloading {public int test(){System.out.println("test1");return 1;}public void test(int a){System.out.println("test2");}   //以下两个参数类型顺序不同public String test(int a,String s){System.out.println("test3");return "returntest3";}   public String test(String s,int a){System.out.println("test4");return "returntest4";}   public static void main(String[] args){Overloading o = new Overloading();System.out.println(o.test());o.test(1);System.out.println(o.test(1,"test3"));System.out.println(o.test("test4",1));}
}

重写和重载之间的区别

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,但不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制

总结:

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

请添加图片描述


http://chatgpt.dhexx.cn/article/PbEp0OTn.shtml

相关文章

java中重载与重写的区别

重写(Overriding) 重载(Overloading) 类的数量 父子类、接口与实现类 本类 方法名称 一致 一致 参数列表 一定不能修改 必须修改 返回类型 一定不能修改 可以修改 异常 可以减少或删除,但不能扩展 可以…

重载和重写的区别有哪些?

重载和重写的区别有以下几点: 一、定义上的区别: 1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 2、覆盖(也叫重写)是指在派生类中重新对基类…

重载和重写有什么区别

一、定义上的区别: 1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。 2、覆盖(复也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数&…

重载和重写区别

以下都是Java的基础面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答,建议收藏,经常温习查阅。 文章目录 3. 重载和重写区别10道不得不会的Java基础面试题 3…

getBytes的坑

由于业务需要,想要获取value字符串的字节长度,于是用了下面方法。 int length value.getBytes().length; 发包给测试的时候,于是奇怪问题产生了。 测试的运行效果和我这边不一样。 1、重启服务 2、查看class确认是否正确打包 然而都没…

java中bitconverter_BitConverter.GetBytes 方法以什么顺序返回字节数组

前言 我在“浅谈 ZipInteger”一文中的 ZipInteger 结构中使用了 BitConverter 类的 GetBytes 方法。当时我是假设 GetBytes 方法根据 IsLittleEndian 的值不同而按照不同的顺序返回字节数组。但是 MSDN 有关 BitConverter 类的文档中没有对此作出明确的说明。请参见我在 MSDN …

java Getbytes转中文,java new String getBytes 到底怎么转换字符集的问题

我们常常遇到字符集转换的问题。 我要说的当然不是网站中遇到的ISO8859-1的那个傻BUG。 实例: 目标,把一个UTF-8的中文字符串转化成GBK的字符串。 新建一个GBK的java项目。 也就是说*.java文件中的字符是用GBK字符集保存的。 在main中,建一个中文字符串,那么这个静态串就是…

java getbytes 乱码_深入解析java String中getBytes()的编码问题

Java服务器后台在和Android端App通信时,遇到了两端关于用MD5加密同一包含中文的字符串结果不一致的问题。 具体问题描述: Java服务器后台和Android端AS用了同一个MD5的工具类,且两边项目的默认编码都是UTF-8 ,加密纯英文数字的字符…

java getbytes 长度_JAVA中的getBytes()方法

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如: Java代码 byte[] b_gbk = "深"…

getBytes方法

字符串中的字符变成一位一位的01比特流 一个英文字符占8比特,也就是一个字节 一个中文字符占24比特,也就是3个字节(其实不同编码方式,占几个字节不一样,我们这里采取的UTF-8编码方式,具体可以看下图&…

最全微信小程序源码项目开发代码合集

小程序源码是用PHP和Java编程语言编写的程序,可以包含在HTML页面中,就像图像包含在页面中一样。您在本教程中构建的应用程序向您展示了如何在IDE中构建和部署微信小程序源码。      源码:y.wxlbyx.icu      创建或导入Applet源文件  …

智慧外链微信小程序源码1.8版本

好不容易搞到的一套最新版的,又废了老大劲搭建了起来,想用于抖音跳转微信加好友使用,不知道是不是哪里没操作对,没达到想要的效果 现在分享出来给大家,人多力量大,跑起来的可以分享一下经验 前端、后端模块…

最新抓取微信小程序源码教程+附逆向工具WxappUnpacker

正文: 文章目录 前言一、工具准备(免费) 1 解密工具2 逆向工具二、解密小程序 1.确认小程序包位置2.打开一个小程序3.解密小程序包三、逆向小程序 1、检查nodejs2、安装依赖3、正式逆向 前言 想成为一名微信小程序的开发者,前端思路的学习…

云开发多功能工具箱微信小程序源码/带流量主微信小程序源码

☑️ 编号:ym398 ☑️ 品牌:无 ☑️ 语言:微信小程序 ☑️ 大小:2MB ☑️ 类型:云开发多功能工具箱 ☑️ 支持:微信小程序 🎉 欢迎关注(发消息才不限制),私信,领取 &…

2048微信小程序源码

2048微信小程序效果 布局页面 页面结构 <view class"action_cavas" bindtouchstart"tapStart" bindtouchmove"tapMove" bindtouchend"tapEnd"> <view class"score"><view class"title">2048<…

微信小程序源码获取(附工具的下载)

在很多时候我们需要对微信小程序的页面样式进行借鉴。所以我们需要对它进行反向破解。下面是反向破解的流程图 第一种是对微信电脑桌面小程序进行破解&#xff1a; 只要你登录电脑wx并使用过小程序&#xff0c;那么对应的路径下的WeChat Files\Applet下就会产生很多.wxapkg结…

微信小程序源码反编译

一、前言 我百度了各种关于小程序地反编译教程&#xff0c;但是感觉都不太适合像我这样地初学小白&#xff0c;踩了挺多坑。在这里把我重新简化好的&#xff0c;快速地获取一个微信小程序源码的方式记录下来。 二、简单聊一下xxxxx.wxapkg 先来想想一个很简单的问题&#xf…

一键生成动漫头像微信小程序源码

一键生成动漫头像微信小程序源码&#xff0c;只需要上传一张图片&#xff0c;即可在线由AI生成一张动漫头像&#xff0c;非常的Nice&#xff01; PS&#xff1a;使用国一个免费AI接口&#xff0c;不保证该接口能永久使用。 下载 https://pan.baidu.com/s/1P6yyjNdi1-HiLi7aMdnV…

1000个微信小程序源码分享

文章目录 微信小程序源代码获取开发账号注册 小程序部分源码展示程序展示 微信小程序 现在的微信小程序非常火爆&#xff0c;网上也有很多学习资源&#xff0c;但是源码资源还是很少的。其实在学习开发微信小程序的时候如果有源码可以供我们借鉴&#xff0c;学习效率也会成倍的…

2048小游戏微信小程序源码

哈喽&#xff01;大家好&#xff0c;我是HappyGirl快乐女孩&#xff0c;最爱海贼王&#x1f49e;&#x1f49e;&#x1f49e; 是一位爱好技术的【技术Fans】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; &#x1f49e;&#x1f49e;&#x1f49e; 如果有对技术感兴趣的…