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 相关文章推荐
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
Jun 21 Java/Android
Spring boot应用启动后首次访问很慢的解决方案
Jun 23 Java/Android
Java实现聊天机器人完善版
Jul 04 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
关于Mybatis中SQL节点的深入解析
Mar 19 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
Jul 15 Java/Android
OpenFeign实现远程调用
Aug 14 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 ADODB使用方法集锦
2008/03/25 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
javascript运行机制之this详细介绍
2014/02/07 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
JS实现简单表格排序操作示例
2017/10/07 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Flask之请求钩子的实现
2018/12/23 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
Python 多进程、多线程效率对比
2020/11/19 Python
python基于openpyxl生成excel文件
2020/12/23 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
学校党支部承诺书
2015/04/30 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
详解flex:1什么意思
2022/07/23 HTML / CSS