从零学Java(29)之方法重载
Posted 编程界明世隐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零学Java(29)之方法重载相关的知识,希望对你有一定的参考价值。
作者简介
作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!
导航
✪ 从零学Java系列目录索引
◄上一篇【28】数组的定义与使用
►下一篇【30】递归
引言
♀ 小AD:明哥,最近好久没看你写文章了。
♂ 明世隐:那是因为我还没上王者。
♀ 小AD:我看到了呀,不过你最近好像天天玩打野,为什么不打辅助了?
♂ 明世隐:因为我想成为野王。
♀ 小AD:野人王?
♂ 明世隐:疯了哈,皮痒是不是?
♀ 小AD:那你为什么转打野了?
♂ 明世隐:因为我玩辅助老是巨大优势被人翻盘,某些人不作为,经常白给,我受不了了?
♀ 小AD:难道这就是你最近不带我上分的原因,莫非是说我?
♂ 明世隐:把莫非两个字去掉,谢谢!
♀ 小AD:😳😳😳
♂ 明世隐:我最近想玩玩打野,主要是熟悉下打野怎么抓人的,懂抓人的套路,这样就可以更好的保护AD了呀。
♀ 小AD:看来明哥还是要我的,吓死我了。
♂ 明世隐:请注意你的言辞,明哥我是有家室的人,别调侃我,你想我死吗?
♀ 小AD:啥,你想死我了?
♂ 明世隐:挖槽,你😱,才多久没见,你就皮起来了,被关傻了?
♀ 小AD:这不都怪明哥不带上分吗?能不憋疯了吗。
♂ 明世隐:是星星太少了吧,🙄🙄
♀ 小AD:还是明哥懂我,那😄
♂ 明世隐:行行行,怕了你了,老规矩。
♀ 小AD:那今天学习点啥呢?
♂ 明世隐:方法重载
♀ 小AD:重载是什么东西
♂ 明世隐:go。。。
概念介绍
重载就是具有相同方法名,返回类型可以不同,参数个数、顺序、类型不同的方法。
Java 允许同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载(overload)。
♀ 小AD:明哥,其实我没太看懂,或者说我有点懵!
♂ 明世隐:谁看都有点懵,因为我们学习的过程肯定不能光看理论呀。
♀ 小AD:哥我懂,实践出真知,实践是检验真理的唯一标准!
♂ 明世隐:哎哟,没看出来,你还是个文化人呢!
♀ 小AD:谢谢哥。
♂ 明世隐:咱们先来看看没有重载的一个实例!
无重载的一个实例代码
- 代码中有3个类似的方法
方法1,两个int类型相加并返回
//定义方法,两个int类型相加
public static int sumInt(int a, int b)
return a + b;
方法2,两double类型相加并返回
//定义方法,两个double类型相加
public static double sumDouble(double a, double b)
return a + b;
方法3,两个Long类型相加并返回
//定义方法,两个Long类型相加
public static Long sumLong(long a, long b)
return a + b;
- main方法,分别调用这几个方法,并将返回结果打印
public static void main(String[] args)
int res1 = sumInt(1, 2);
double res2 = sumDouble(1.0, 2.0);
Long res3 = sumLong(1L, 2L);
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
- 完整的代码如下:
public class NoOverload
public static void main(String[] args)
int res1 = sumInt(1, 2);
double res2 = sumDouble(1.0, 2.0);
Long res3 = sumLong(1L, 2L);
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
//定义方法,两个int类型相加
public static int sumInt(int a, int b)
return a + b;
//定义方法,两个double类型相加
public static double sumDouble(double a, double b)
return a + b;
//定义方法,两个Long类型相加
public static Long sumLong(long a, long b)
return a + b;
- 运行结果如下:
3
3.0
3
♀ 小AD:明哥,你这个代码很简单啊,我一看就懂。
♂ 明世隐:就懂了?
♀ 小AD:那必须的呀,之前跟明哥学了那么多,这个不就小意思吗,定义了几个差不多的方法,然后main方法调用呗。没什么难的。
♂ 明世隐:嗯,确实没什么难的,证明你之前还是用了心的。
♀ 小AD:那是当然。
♂ 明世隐:但其实代码是有些问题的。
♀ 小AD:什么问题,我咋不觉得有什么问题。
♂ 明世隐:也不能说有什么问题吧,就是说有可以优化的地方。
♀ 小AD:这个我倒是很想知道。
♂ 明世隐:你看这个3个方法是不是很类似呢?
♀ 小AD:对啊,写法差不多,都是两个相加
♂ 明世隐:如果这个类的方法有很多,是不是对应程序员来说很麻烦,我的一个个的是记住这些方法是干什么用的,或者说进到方法里面去看,这个方法干嘛用的,然后才知道我们要去调用哪个方法,是不是?
♀ 小AD:是呀
♂ 明世隐:举个例子,有3把钥匙,分别是3个房间的房门钥匙,它们都长得差不多,那得一个个去试呢?
♀ 小AD:对,要一个个的试,那如果我第一个就试中了呢?
♂ 明世隐:不要说这种特例,那如果有几十把钥匙呢?你再试试
♀ 小AD:😂😂,明哥你真坏!
♂ 明世隐:注意言辞哈,这种话很危险。
♀ 小AD:那明哥是不是有什么可以让我们不用记忆这些的写法呢?
♂ 明世隐:有,那就是方法重载,重载后就记住一个方法名就行。
♀ 小AD:那以后我就随便用啦,全个它写成重载,哈哈哈!
♂ 明世隐:那不能的,这个是有适用情况的,比如上面这种,它们是类似的方法,这个是前提,不能滥用的。
♀ 小AD:哦,我还以为可以随便重载,哈哈,会出乱子的呀。
♂ 明世隐:那肯定的,合适的才是最好的,下面看看重载是怎么写的。
重载的例子
package java0.overload;
public class Overload
public static void main(String[] args)
int res1 = sum(1, 2);
double res2 = sum(1.0, 2.0);
Long res3 = sum(1L, 2L);
System.out.println(res1);
System.out.println(res2);
System.out.println(res3);
//定义方法,两个int类型相加
public static int sum(int a, int b)
return a + b;
//定义方法,两个double类型相加
public static double sum(double a, double b)
return a + b;
//定义方法,两个Long类型相加
public static Long sum(long a, long b)
return a + b;
运行结果:
3
3.0
3
♀ 小AD:明哥,我看你就改了个方法名
♂ 明世隐:对啊,是不是很简单。
♀ 小AD:方法名还可以重复的吗?我一直以为一个类中不能有相同的方法名。
♂ 明世隐:所以说这就是方法重载呀,java允许方法名重复。
♀ 小AD:那看起调用的时候,很方便呀,只要调用统一的方法sum就行了。
♂ 明世隐:这就是重载方便的地方,你也不需要去记住方法名,统一调用即可。
♀ 小AD:那是不是可以理解成我有一把万能钥匙,多少个房间都能开,不需要一个个的试了,那我不是发财了?
♂ 明世隐:你想什么呢你,活腻了?
♀ 小AD:我说的发财不是那个发财,意思是很爽的样子,你老了你不懂。
♂ 明世隐:听你放屁!重载有几种方式,我们来学习一下。
重载的几种方式
实例1
参数的个数不同的重载。
public class OverLoading
public void print()
System.out.println("没有参数的方法print");
public void print(String a)
System.out.println("一个参数的方法print");
public void print(String a,String b)
System.out.println("2个参数的方法print");
public void print(String...strs)
System.out.println("n个参数的方法print");
public static void main(String[] args)
OverLoading ol = new OverLoading();
ol.print();
ol.print("a");
ol.print("a","b");
ol.print("a","b","c");
运行:
没有参数的方法print
一个参数的方法print
2个参数的方法print
n个参数的方法print
实例2
参数的类型不同的重载
public class OverLoading2
public void print(String a)
System.out.println("参数是String 类型方法");
public void print(int a)
System.out.println("参数是int 类型方法");
public void print(double a)
System.out.println("参数是double 类型方法");
public static void main(String[] args)
OverLoading2 ol = new OverLoading2();
ol.print("a");
ol.print(1);
ol.print(3.14);
运行:
参数是String 类型方法
参数是int 类型方法
参数是double 类型方法
实例3
参数的类型和个数混合重载。
public class OverLoading2
public void print(String a)
System.out.println("参数是String 类型方法");
public void print(int a)
System.out.println("参数是int 类型方法");
public void print(int a,int b)
System.out.println("2个参数是int 类型方法");
public void print(double a)
System.out.println("参数是double 类型方法");
public static void main(String[] args)
OverLoading2 ol = new OverLoading2();
ol.print("a");
ol.print(1);
ol.print(1,2);
ol.print(3.14);
运行:
参数是String 类型方法
参数是int 类型方法
2个参数是int 类型方法
参数是double 类型方法
实例4
想通过不同返回值来重载,会得到编译错误,是不被允许的。
实例5
main方法能被重载吗?答案是可以的,但是只有
public static void main(String[] args)
会被虚拟机识别为入口方法,其他的只是作为普通方法来使用。
public class OverLoading4
public static void main(String[] args)
System.out.println("main String[]");
public static void main(String a)
System.out.println("main String");
运行结果:
main String[]
可以看到只有public static void main(String[] args)被执行了,当然我们按照普通方法来调用是没有问题的。
public class OverLoading4
public static void main(String[] args)
System.out.println("main String[]");
//调用普通方法main(String)
main("a");
public static void main(String a)
System.out.println("main String");
运行结果:
main String[]
main String
给小AD举例
♀ 小AD:明哥,这么详细吗,我感觉今天学的很爽啊。
♂ 明世隐:真的爽吗?
♀ 小AD:爽
♂ 明世隐:待会让你更爽。
♀ 小AD:感觉被嫂子听到你要完蛋了。
♂ 明世隐:我不怕,给你看看我的例子你就知道我怕不怕了。
♀ 小AD:那看看咯!
public class OverloadDemo
public static void main(String[] args)
killAD(1);
killAD(1.0);
killAD(1L);
//击杀小鲁班的方法1
public static void killAD(int type)
System.out.print("小鲁班之死方式" + type);
System.out.println(":凯开大,正面2闪到鲁班脸上一刀劈死!");
//击杀小鲁班的方法2
public static void killAD(double type)
System.out.print("小鲁班之死方式" + type);
System.out.println(":凯后面包抄,开大,2技能到鲁班脸上一刀劈死!");
//击杀小鲁班的方法3
public static void killAD(Long type)
System.out.print("小鲁班之死方式" + type);
System.out.println(":凯在草丛,直接2技能到鲁班脸上一刀劈死!");
运行结果:
小鲁班之死方式1:凯开大,正面2闪到鲁班脸上一刀劈死!
小鲁班之死方式1.0:凯后面包抄,开大,2技能到鲁班脸上一刀劈死!
小鲁班之死方式1.0:凯后面包抄,开大,2技能到鲁班脸上一刀劈死!
♂ 明世隐:例子怎么样?看懂了吗。
♀ 小AD:就小鲁班的一百种死法呗,就差拿皮鞭抽我了。
♂ 明世隐:不不不,我就写了3种😂😂
♀ 小AD:我觉得你可以写100种的,只要你想。
♂ 明世隐:只要我想?我怕你会哭!
♀ 小AD:😠😠😠
♂ 明世隐:能看明白不?重载理解了吗?
♀ 小AD:都这么深刻了,不理解那我怕不是傻子了吗。
♂ 明世隐:行,那上工吧。
♀ 小AD:终于来了,go!
小结
这节学习了“ 方法重载 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。
评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!
导航
✪ 从零学Java系列目录索引
◄上一篇【28】数组的定义与使用
►下一篇【30】递归
热门专栏推荐
【1】Java小游戏(俄罗斯方块、飞机大战、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、在线考试、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、贪吃蛇、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】Idea从零到精通
以上是关于从零学Java(29)之方法重载的主要内容,如果未能解决你的问题,请参考以下文章