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 相关文章推荐
Java输出Hello World完美过程解析
Jun 13 Java/Android
Java实现斗地主之洗牌发牌
Jun 14 Java/Android
springBoot基于webSocket实现扫码登录
Jun 22 Java/Android
分析设计模式之模板方法Java实现
Jun 23 Java/Android
spring boot中nativeQuery的用法
Jul 26 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
Java spring定时任务详解
Oct 05 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
Java实现HTML转为Word的示例代码
Jun 28 Java/Android
MyBatis XPathParser解析器使用范例详解
Jul 15 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在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
vue使用stompjs实现mqtt消息推送通知
2017/06/22 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
element-ui组件table实现自定义筛选功能的示例代码
2019/03/15 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
安装PyInstaller失败问题解决
2019/12/14 Python
python如何实现单链表的反转
2020/02/10 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
python+opencv实现车道线检测
2021/02/19 Python
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
2014年祖国生日寄语
2014/09/19 职场文书
安全承诺书
2015/01/19 职场文书
工作检讨书怎么写
2015/01/23 职场文书
运动会表扬稿范文
2015/05/05 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书