什么是方法重载和重写,区别是什么?

ops/2024/10/21 6:28:26/

面试题目

  • 什么是方法重载?
  • 什么是方法重写?
  • 方法重载和重写有什么区别?
  • 返回值不同算不算方法重载?

这个是对Java基础知识的考察,但我们要掌握的是写重载和重写方法有什么好处,为什么要这样写?

题目解析

什么是方法重载

在 Java 中,方法重载是指在同一个类中定义多个方法,它们具有相同的名称参数列表不同。具体来说,方法重载要求方法的方法名相同,但是参数列表必须不同。参数列表可以是参数的数据类型、个数和顺序。在Java中,方法重载是静态绑定的,即在编译时就确定了调用哪个方法。方法重载的定义如下:

java">public class HeavyLoad {public int add(int a, int b) {return a + b;}public int add(int a, int b, int c) {return a + b + c;}public String add(String a) {return a;}
}

返回值不同算不算方法重载(易混)

先来看一下以下代码是不是方法的重载?

java"> public int add(int a, int b) {return a + b;}public double add(int a, int b) {return (double) a + b;}

答案:不是重载,如果你在IDEA工具中写入这两个方法,会直接报错,提示add方法已经存在了。再来看一下重载的概念,重载的方法中的参数列表不同

什么是方法重写

方法重写是指在子类中定义与父类中同名、参数列表相同返回值类型相同或者是其子类的方法,方法重写是动态绑定的,即在运行时才确定调用哪个方法。

定义一个父类Animal.java

java">public class Animal {public void eat() {System.out.println("Animal is eating.");}
}

再定义一个Dog子类,然后使用extends继承Animal

java">public class Dog extends Animal {@Overridepublic void eat() {System.out.println("Dog is eating.");}
}

再写一个Cat子类,同样也继承Animal父类

java">public class Cat extends Animal {@Overridepublic void eat() {System.out.println("Cat is eating.");}
}

通过上述的Dog和Cat类中可以看出,都重写了和Animal父类中一样的eat()方法,但是方法里面的输出的值不一样,这就是重写,在IDEA的父类中,点击方法左侧的箭头,就可以看到有哪些类重写了该方法。

image-20240301164014325

方法重载和重写有什么区别

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

  1. 定义上的不同
  • 重载是指定义相同的方法名,参数不同。
  • 重写时方法名和参数都一样,只有方法中的实现体不一样。
  1. 规则上的不同

重载的规则

  • 必须具有不同的参数列表
  • 可以有不同的访问修饰符
  • 可以抛出不同的异常

重写的规则

  • 参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载

  • 返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

  • 访问修饰符的限制一定要大于被重写方法的访问修饰符。

  • 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

    例如,在Animal父类的eat方法中并没有抛出异常,在Cat子类重写的eat方法上抛出异常处理,则会报错,提示要去掉该异常处理或者在Animal类的eat方法上也添加该异常处理。

    如果在Animal父类的eat中添加异常处理,在子类重写eat方法时可以不加异常处理,不会报错。

image-20240301164940181


http://www.ppmy.cn/ops/15912.html

相关文章

常见的几种垃圾回收器

什么是垃圾回收器,可以这样理解,垃圾回收算法是概念理论,对应JAVA中的接口,垃圾回收器就是具体的实现,JVM有很多垃圾回收器,它们实现了不同的垃圾回收算法,可以用在不同jdk版本,也适…

分布式技术在文本摘要生成中的应用

摘要 自然语言处理首先要应对的是如何表示文本以供机器处理,随着网络技术的发展和信息的公开,因特网上可供访问的数字文档成爆炸式的增长,文本摘要生成逐渐成为了自然语言处理领域的重要研究课题。本文主要介绍了分布式技术在文本摘要生成中…

react之组件与JSX

第一章 - 描述用户界面 概述:React是一个用于构建用户界面(UI)的JavaScript库,用户界面由按钮,文本和图像等小单元内容构建而成。React帮助你把它们组合成可重用,可嵌套的组件。从web端网站到移动端应用&a…

C++/QT + Mysql + Tcp 企业协作管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 1、项目概要:C/S架构、数据库Mysql、C、QT;支持实时通信、局域网内通信,可多个客户端同时登录; 2、(Server)管理端:用户管理、…

【笔试训练】day11

1.游游的水果大礼包 思路: 枚举。假设最后的答案是x个a礼包,y个b礼包,得到一个式子:ansa*xb*y 我们可以枚举x的数量,这样就能变相的把y的求出来。呃这就是鸡兔同笼问题嘛 x最大的范围是多少呢?也就是a礼…

人工智能在现代科技中的应用和未来发展趋势

人工智能(Artificial Intelligence,简称AI)作为一种模拟人类智能的技术,已经在现代科技中得到广泛应用,并且在未来有着更大的发展潜力。 首先,人工智能在现代科技中的应用是非常广泛的。其中,最…

数据结构PT2——堆栈/队列

一、堆栈(FILO) 堆栈是一种线性结构,也是一种特殊的线性表 1:堆栈的顺序存储实现 栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成 #define MaxSize typeof struct SNode *Stack struct SNode{ElementType Data[MaxSi…

【毕设绝技】基于 SpringCloud 的在线交易平台商城的设计与实现(一)

毕业设计是每个大学生的困扰,让毕设绝技带你走出低谷迎来希望! 基于 SpringCloud 的在线交易平台商城的设计与实现 一、摘 要 随着互联网的快速发展,人们对商品经济的消费和思考不再停留在传统的经济模式上,网上购物商城是企业与…