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的MathML转图片的方法(示例代码)
Jun 23 Java/Android
Java并发编程之详解CyclicBarrier线程同步
Jun 23 Java/Android
Java常用工具类汇总 附示例代码
Jun 26 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
浅谈Java父子类加载顺序
Aug 04 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
零基础学java之带返回值的方法的定义和调用
Apr 10 Java/Android
Java线程的6种状态与生命周期
May 11 Java/Android
springboot读取nacos配置文件
May 20 Java/Android
Qt数据库应用之实现图片转pdf
Jun 01 Java/Android
Spring Security动态权限的实现方法详解
Jun 16 Java/Android
Java多线程并发FutureTask使用详解
Jun 28 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
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
使用jquery解析XML的方法
2014/09/05 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
微信小程序开发的基本流程步骤
2019/01/31 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python随机生成彩票号码的方法
2015/03/05 Python
Python学生信息管理系统修改版
2018/03/13 Python
python素数筛选法浅析
2018/03/19 Python
Python常见工厂函数用法示例
2018/03/21 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
目前最全的python的就业方向
2018/06/05 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
关于python字符串方法分类详解
2019/08/20 Python
Python实现微信机器人的方法
2019/09/06 Python
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
社会学专业学生职业规划书
2014/02/07 职场文书
小学生优秀评语大全
2014/04/22 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
python利用while求100内的整数和方式
2021/11/07 Python