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 Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
详解Java分布式事务的 6 种解决方案
Jun 26 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
Java中CyclicBarrier和CountDownLatch的用法与区别
Aug 23 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 Java/Android
聊聊SpringBoot自动装配的魔力
Nov 17 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Android Studio 计算器开发
May 20 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
基于mysql的bbs设计(三)
2006/10/09 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
js调用css属性写法
2013/09/21 Javascript
js中生成map对象的方法
2014/01/09 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
原生js二级联动效果
2017/06/20 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
实习期自我鉴定
2013/10/11 职场文书
师范应届生求职信
2013/11/15 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2015年见习期工作总结
2014/12/12 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
Python实现位图分割的效果
2021/11/20 Python
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python