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如何初始化执行sql语句
Jun 22 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
Spring Boot两种全局配置和两种注解的操作方法
Jun 29 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
Jun 21 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
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
php自定义分页类完整实例
2015/12/25 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
js计算页面刷新的次数
2009/07/20 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
js图片上传的封装代码
2017/08/01 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python检测远程端口是否打开的方法
2015/03/14 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
详解python中*号的用法
2019/10/21 Python
python模拟斗地主发牌
2020/04/22 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
加拿大留学自荐信
2014/01/28 职场文书
《掌声》教学反思
2014/02/23 职场文书
基督教婚礼主持词
2014/03/14 职场文书
2014年教学工作总结
2014/11/13 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书