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中一些比较常用的注解总结
Jun 11 Java/Android
JPA如何使用entityManager执行SQL并指定返回类型
Jun 15 Java/Android
SpringBoot项目中控制台日志的保存配置操作
Jun 18 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
使用Spring处理x-www-form-urlencoded方式
Nov 02 Java/Android
RestTemplate如何通过HTTP Basic Auth认证示例说明
Mar 17 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
零基础学java之带参数以及返回值的方法
Apr 10 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
Spring Security动态权限的实现方法详解
Jun 16 Java/Android
HttpClient实现文件上传功能
Aug 14 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中的插件机制原理和实例
2014/07/08 PHP
常用PHP框架功能对照表
2014/10/23 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
django 单表操作实例详解
2019/07/30 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
实习鉴定评语
2014/01/19 职场文书
庆七一活动方案
2014/01/25 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
家教广告词
2014/03/19 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript