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异步之call future
Jun 14 Java/Android
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
SpringAop日志找不到方法的处理
Jun 21 Java/Android
Java使用jmeter进行压力测试
Jul 09 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
Java练习之潜艇小游戏的实现
Mar 16 Java/Android
Java字符缓冲流BufferedWriter
Apr 09 Java/Android
Elasticsearch Recovery 详细介绍
Apr 19 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
Android Studio 计算器开发
May 20 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 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
php实现求相对时间函数
2015/06/15 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
学习python处理python编码问题
2011/03/13 Python
import的本质解析
2017/10/30 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
妇女工作先进事迹
2014/08/17 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
工商局个人工作总结
2015/03/03 职场文书
医院合作意向书范本
2015/05/08 职场文书
个人欠条范本
2015/07/03 职场文书
行为规范主题班会
2015/08/13 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python