Java方法重载和方法重写的区别到底在哪?


Posted in Java/Android onJune 11, 2021

方法重载和方法重写的区别

方法重载

方法重载的主要是在一个类当中,方法的方法名相同,参数列表不同,返回值类型可以相同,也可以不同.

/*
这里只是简单的示例一下,Food Snack没有给出,意会一下即可.
*/
public class Demo{
	public void eat(Food food){
		System.out.println("今天正常吃饭!吃了" + food.name);
	}
	
	public void eat(Snack snack){
		System.out.println("今天想吃零食!吃了" + snack.name);
	}
	
	public int eat(){
		int money = 10;
		System.out.println("今天喝西北风!但是省钱了,返回省钱的数目");
		return 10;
	}
	
	//public void eat(){
	//	int money = 10;
	//	System.out.println("今天喝西北风!但是省钱了,返回省钱的数目");
	//}
}

注意:如果参数列表相同,返回值类型不同是不算重载的.这种写法会直接报错.因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法,肯定就傻掉了,所以就告诉你,兄弟你写错了!

方法重写

方法的重写体现在子父类当中,最典型的是子类重写父类中的方法.

Father类和Son类都有Walk(boolean canRun)方法.
但是执行的时候结果却不同.

public class Father {

    private boolean canRun = false;

    public boolean isCanRun() {
        return canRun;
    }

    public void setCanRun(boolean canRun) {
        this.canRun = canRun;
    }

    public void walk(boolean canRun){
        if(canRun){
            System.out.println("父亲尽力跑啊跑!");
        }else{
            System.out.println("父亲老了,只可以走路!");
        }
    }
}
public class Son extends Father{

    boolean canRun;

    public Son(boolean canRun){
        this.canRun = canRun;
    }

    @Override
    public void walk(boolean canRun) {
        if(canRun){
            System.out.println("儿子可以跑!");
        }else{
            System.out.println("儿子也只能走!");
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Father father = new Father();
        Son son = new Son(true);
        father.walk(father.isCanRun());
        son.walk(son.canRun);
    }
}

这里体现的就是子类Son重写了父类中的Walk()方法.
注意:重写这里有一个重要的点在于子类重写的方法不能低于父类方法的访问权限.
可以简单理解一下:在多态当中,父类引用指向子类对象,如果子类对象中重写的方法权限低于父类方法了,那么多态情况下,父类引用就无法访问子类中的方法了.

public class Test {
    public static void main(String[] args) {
        Father father = new Son(true);
        System.out.println(father.isCanRun());	// false
        father.walk(father.isCanRun());			// 儿子也只能走!
    }
}

这里很神奇,明明我的Son对象创建的时候传入的参数是true,为什么执行结果却是儿子也只能走!呢?

这里先进行一下这个知识点的小结,上面的问题会在下一个文章中讲解.

小结

1.方法重载体现在同一个类当中同名方法参数列表不同的情况(必须满足),返回值类型可以相同也可以不同.如果两个方法方法名相同,参数列表相同但是返回值类型不同是不算重载的.

2.方法重写体现在子父类当中,体现的不同类之间的联系.要求子类重写的方法有和父类相同的方法名,参数列表和返回值类型,但是方法内部的具体操作可以发生变化.方法重写时要求子类方法的范文权限不能低于父类方法的访问权限

到此这篇关于Java方法重载和方法重写的区别到底在哪?的文章就介绍到这了,更多相关Java方法重载和方法重写内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
springboot利用redis、Redisson处理并发问题的操作
Jun 18 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
SpringBoot 拦截器妙用你真的了解吗
Jul 01 Java/Android
swagger如何返回map字段注释
Jul 03 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
使用Java去实现超市会员管理系统
Mar 18 Java/Android
springboot layui hutool Excel导入的实现
Mar 31 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
Jun 21 Java/Android
Spring boot admin 服务监控利器详解
Aug 05 Java/Android
Java 将PPT幻灯片转为HTML文件的实现思路
springboot中一些比较常用的注解总结
Jun 11 #Java/Android
分享一些Java的常用工具
浅谈Java实现分布式事务的三种方案
源码解读Spring-Integration执行过程
为什么在foreach循环中JAVA集合不能添加或删除元素
Jun 11 #Java/Android
手把手教你用SpringBoot将文件打包成zip存放或导出
You might like
PHP安全编程之加密功能
2006/10/09 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python实现字符串加密成纯数字
2019/03/19 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
python中tab键是什么意思
2020/06/18 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
《鲁班和橹板》教学反思
2014/04/27 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
合作意向书
2014/07/30 职场文书
世界名著读书笔记
2015/06/25 职场文书
python字符串常规操作大全
2021/05/02 Python
JavaScript实现队列结构过程
2021/12/06 Javascript
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技