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
Jun 14 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
Spring Boot 排除某个类加载注入IOC的操作
Aug 02 Java/Android
mybatis中注解与xml配置的对应关系和对比分析
Aug 04 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
java代码实现空间切割
Jan 18 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
app场景下uniapp的扫码记录
Jul 23 Java/Android
Java中的Kafka为什么性能这么快及4大核心详析
Sep 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
php 获取mysql数据库信息代码
2009/03/12 PHP
解析php中const与define的应用区别
2013/06/18 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
Javascript实现字数统计
2015/07/03 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
深入理解Python中字典的键的使用
2015/08/19 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Pandas分组与排序的实现
2019/07/23 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
办公室文员工作自我鉴定
2014/09/19 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript