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实现分布式事务的三种方案
Jun 11 Java/Android
springboot中一些比较常用的注解总结
Jun 11 Java/Android
使用Springboot实现健身房管理系统
Jul 01 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
logback 实现给变量指定默认值
Aug 30 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
Apr 08 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Spring IOC容器Bean的作用域及生命周期实例
May 30 Java/Android
使用Postman测试需要授权的接口问题
Jun 21 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
volatile保证可见性及重排序方法
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
玛琪朵 Macchiato
2021/03/03 咖啡文化
php数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
Array对象方法参考
2006/10/03 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
js对象的比较
2011/02/26 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
Python编写检测数据库SA用户的方法
2014/07/11 Python
python实现超市扫码仪计费
2018/05/30 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
python如何将多个PDF进行合并
2019/08/13 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
奥地利网上现代灯具和灯饰店:Lampenwelt.at
2018/01/29 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
学校经典推荐信
2013/10/30 职场文书
高职教师岗位职责
2013/12/24 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers