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 相关文章推荐
简单总结SpringMVC拦截器的使用方法
Jun 28 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
Java org.w3c.dom.Document 类方法引用报错
Aug 07 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
Spring Cloud 中@FeignClient注解中的contextId属性详解
Sep 25 Java/Android
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
Mar 21 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
mybatis-plus模糊查询指定字段
Apr 28 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
java.util.NoSuchElementException原因及两种解决方法
Jun 28 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 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 判断数组是几维数组
2013/03/20 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
php实现文件预览功能
2017/05/23 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
仅img元素创建后不添加到文档中会执行onload事件的解决方法
2011/07/31 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
jQuery简单实现遍历单选框的方法
2017/03/06 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
Vue基本使用之对象提供的属性功能
2019/04/30 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
自主招生英文自荐信
2015/03/25 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python