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 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
Java集成swagger文档组件
Jun 28 Java/Android
Java 数组内置函数toArray详解
Jun 28 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
Spring mvc是如何实现与数据库的前后端的连接操作的?
Jun 30 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Android实现获取短信验证码并自动填充
May 21 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
php面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
原生js实现轮播图特效
2020/05/04 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
Python Socket编程入门教程
2014/07/11 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
python 基于opencv去除图片阴影
2021/01/26 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
若干个Java基础面试题
2015/05/19 面试题
人事专员岗位职责范本
2014/03/04 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
Python机器学习之基础概述
2021/05/19 Python
利用Python实时获取steam特惠游戏数据
2022/06/25 Python