【Java SE语法】重载(overload)和重写(override)一样吗?它们的区别是什么?

news2024/11/5 21:55:02

目录

1. 重载及其示例代码

1.1 重载(Overload)

1.2 示例代码

2. 重写及其示例代码

2.1 重写(Override)

2.2 示例代码

3. 总结


        方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

1. 重载及其示例代码

1.1 重载(Overload)

  • 定义:方法重载是指在同一个类中,允许定义多个同名方法,只要它们的参数列表不同(参数的类型、数量或顺序不同)。返回类型可以相同也可以不同。
  • 目的:重载的主要目的是为了提供相同功能但参数不同的方法。
  • 规则:重载的方法必须有不同的参数列表,编译器通过参数列表来区分不同的重载方法。
  • 返回类型:方法的返回类型不影响重载,即使两个方法的返回类型不同,只要参数列表不同,它们也可以是重载的。

1.2 示例代码

class Animal {
    // 重载方法:不同的参数列表
    void makeSound() {
        System.out.println("Some sound");
    }

    void makeSound(String sound) {
        System.out.println(sound);
    }
}

public class TestOverloading {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        myAnimal.makeSound();       // 输出:Some sound
        myAnimal.makeSound("Hello"); // 输出:Hello
    }
}

在这个例子中,makeSound 方法被重载了两次,一次没有参数,另一次接受一个 String 类型的参数。尽管它们的返回类型相同,但因为参数列表不同,所以它们是重载的方法。

2. 重写及其示例代码

2.1 重写(Override)

  • 定义:方法重写是指在子类中重新定义父类的方法。子类重写的方法必须有相同的方法名、参数列表和返回类型。
  • 目的:重写的目的是为了改变父类方法的行为,或者提供更适合子类的方法实现。
  • 规则:重写的方法必须有相同的方法名和参数列表,返回类型必须相同或者是父类返回类型的子类型(协变返回类型)。
  • 访问权限:重写的方法不能拥有比父类方法更严格的访问权限。
  • 异常:重写的方法不能抛出新的检查异常或者比父类方法声明的更宽泛的异常。

2.2 示例代码

class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    // 重写方法:相同的方法名、参数列表和返回类型
    @Override
    void makeSound() {
        System.out.println("Bark");
    }
}

public class TestOverriding {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // 输出:Bark
    }
}

在这个例子中,Dog 类继承自 Animal 类,并重写了 makeSound 方法。因为 Dog 类的 makeSound 方法有相同的方法名、参数列表和返回类型,所以它重写了父类 AnimalmakeSound 方法。

3. 总结

        重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。

补充:

这里既然提到了里氏替换原则,那接下来就给大家补充一下面向对象设计的七大设计原则(同时也是软考中级软件设计师中的一个考点):

  1. 单一职责原则:要设计目的单一的类;
  2. 开发——封闭原则:对扩展开发,对修改关闭;
  3. 里氏替换原则:子类可以替换父类
  4. 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程;
  5. 接口隔离原则:使用多个专门的接口比使用单一的总接口要好;
  6. 组合重用原则:要尽量使用组合,而不是继承关系来达到重用的目的(这样可以降低耦合度);
  7. 迪米特原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。

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

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

相关文章

“大跳水”的全新奥迪A3,精准狙击年轻人的心

文/王俣祺 导语:随着传统豪华品牌在国内市场的全面崩盘,奥迪再一次坐不住了。这次,奥迪“割肉”的目标瞄准了被称为“年轻人第一台豪车”的奥迪A3,这款车问世以来,就凭借出色的性能与品质收获了一大批年轻粉丝。如今&a…

两台手机如何提词呢,一台手机后置高清摄像一台手机前置提词+实时监测状态的解决方案来喽

拍视频只会用前置摄像头可不行啊, 后置高清才会更有流量, 你看哦,我用的是后置摄像头拍摄, 然后前面就用来提词, 它不光能提词, 和其他家不一样的是, 还能把后面手机画面投影到前面手机 这样呀&…

[SWPUCTF 2021 新生赛]easy_sql的write up

开启NSSCTF靶场,在浏览器中访问链接,看到让我们输入点什么还有标签页名字提示: "参数是wllm" 直接/?wllm1访问一下: 这里就直接用sqlmap直接爆破了: 查看数据库有哪些: python sqlmap.py -u …

Tr2 CYT2B75使用记录(二):GPIO、串口、CAN(FD)和busoff检测、看门狗和复位原因

目录 概述GPIO串口1.FIFO2.中断 CANFDRX Buffer and FIFO ElementTX Buffer Elementbusoff 检测 看门狗复位原因 待梳理 概述 GPIO 1.如何定位IO的作用 2.读取电平必须为输入模式 串口 熟悉手册串口特性如下: ■ 数据帧大小可从4位编程到16位 ■ STOP位的可编程…

Android13 系统/用户证书安装相关分析总结(二) 如何增加一个安装系统证书的接口

一、前言 接着上回说,最初是为了写一个SDK的接口,需求大致是增加证书安装卸载的接口(系统、用户)。于是了解了一下证书相关的处理逻辑,在了解了功能和流程之后,发现settings中支持安装的证书,只…

【Java语言】继承和多态(一)

继承 继承就是实现代码的复用;简而言之就是重复的代码作为父类(基类或超类),而不同的可以作为子类(派生类)。如果子类想要继承父类的成员就一定需要extends进行修饰(如:(…

04_CC2530+Uart串口通信

04_CC2530UART串口通信 串口通信基本概念 串行通信: 数据字节一位位地依次传送的通信方式, 串行通信的速度慢, 但用的传输线条数少, 成本低,适用于远距离的数据传送并行通信: 数据字节的各位同事传送的通信方式, 优点是数据传送速度快, 缺点是占用的传输线条数多,…

【计算机网络安全】湖北大学–DNS欺骗实验

目录 0x00 ettercap-原理 0x01 ettercap-arp欺骗 0x02 ettercap-dns劫持 0x00 ettercap-原理 攻击者冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址。这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站。 首先&…

雷池社区版新版本功能防绕过人机验证解析

前两天,2024.10.31,雷池社区版更新7.1版本,其中有一个功能,新增请求防重放 更新记录:hhttps://docs.waf-ce.chaitin.cn/zh/%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95 仔细研究了这个需求,…

【深度学习基础】深入理解 卷积与卷积核

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 卷积 1.1 …

SpringBoot集成Shiro+Jwt+Redis

1. 概述 首先需要知道为什么使用 ShiroJwtRedis 进行登录认证和权限控制。 1. 为什么用Shiro? 主要用的是 shiro 的登录认证和权限控制功能。 Shiro 参见本栏目文章 🍃《Shiro实战》 2. 为什么用Jwt? Shiro 默认的 Session 机制来帮助实现…

基于Python的乡村居民信息管理系统【附源码】

基于Python的乡村居民信息管理系统 效果如下: 系统主页面 系统登录页面 管理员主页面 居民管理页面 政务学习页面 土地信息管理页面 个人信息管理页面 居民登陆页面 村委人员主页面 研究背景 随着信息技术的飞速发展和乡村振兴战略的深入实施,传统的乡…

HTML 基础标签——表单标签<form>

文章目录 1. `<form>` 标签:定义表单容器2. `<input>` 标签:多用途输入控件3. `<textarea>` 标签:多行文本输入框4. `<select>` 标签:下拉选择框5. `<option>` 标签:下拉菜单选项6. `<button>` 标签:按钮元素7. `<label>` 标签…

Debian的基本使用

前言 本人撰写的相关文档中&#xff0c;部分技术已经不再提供支持了&#xff08;不得不感慨&#xff0c;菜鸡的个人进步追不上技术更新啊&#xff09;&#xff0c;比如Centos、EasyExcel&#xff0c;虽然说目前仅使用还没有什么问题&#xff0c;但是还是要了解一下备用方案。 …

比亚迪能不能打败特斯拉?

文/孔文清 比亚迪在第三季度的财报发布后&#xff0c;首次在营收上超越了特斯拉&#xff0c;这是电动汽车行业的重要时刻&#xff0c;也反映了中国产业在全球市场中的崛起。 比亚迪在其2024年第三季度财报中首次实现了2011.2亿元的营业收入&#xff0c;相比特斯拉的1793亿元&a…

什么情况下,不推荐建立索引?

一般有以下几种情况不推荐建立索引&#xff1a; 1&#xff09;对于数据量很小的表 当表的数据量很小&#xff08;如几百条记录&#xff09;时&#xff0c;建立索引并不会显著提高查询性能&#xff0c;反而可能增加管理的复杂性&#xff1b; 2&#xff09;频繁更新的表 对于…

深度学习基础知识-残差网络ResNet

目录 一、ResNet 的核心思想&#xff1a;残差学习&#xff08;Residual Learning&#xff09; 二、ResNet 的基本原理 三、ResNet 网络结构 1. 残差块&#xff08;Residual Block&#xff09; ResNet 的跳跃连接类型 2. 网络结构图示 四、ResNet 的特点和优势 五、ResNe…

做反向代购没货源,也能靠“东方玄学”风生水起?

在全球化日益加深的今天&#xff0c;文化的交流与碰撞愈发频繁。近年来&#xff0c;一股神秘的东方力量——风水玄学&#xff0c;在海外社交媒体上悄然走红&#xff0c;成为众多外国友人追捧的新风尚。从TikTok到Instagram&#xff0c;无数华人博主通过分享风水知识、解读玄学饰…

新闻稿件管理:SpringBoot框架实战指南

3系统分析 3.1可行性分析 通过对本新闻稿件管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本新闻稿件管理系统采用SSM框架&#xff0c;JAVA作为开发语…

web实操2——idea创建普通web项目

创建项目 就是普通的java项目&#xff0c;项目右键add framework support&#xff08;添加框架支持&#xff09;,然后点击Web Application&#xff08;web应用程序&#xff09;&#xff0c;然后点击OK。即可。 文件下就会多一个web文件夹&#xff0c;里面是WEB-INF文件夹&…