IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java编程思想】为什么只能用参数列表区分重载的方法?一旦涉及类型转换会怎么样? -> 正文阅读

[Java知识库]【Java编程思想】为什么只能用参数列表区分重载的方法?一旦涉及类型转换会怎么样?


前言

重载是方法名相同,但是参数列表成分不同…
但是为什么只能是参数列表?
别的成分能否区分重载方法?不能的原因是什么?
本篇文章主要想记录一下,方法重载的区分为什么只能用参数列表!
以及参数列表中区分重载方法,一旦涉及类型转换会怎么样?


1.按照参数列表进行重载分类

  • 每个重载的方法都必须有一个独一无二的参数列表
  • 这里甚至包括了参数的顺序 ! 相同的参数类型,不同的顺序,也叫方法重载(但是一般不推荐这样使用,代码会很难维护。。
  • 那么来个骚的:“你知道下面这行代码会输出什么吗?”
    在这里插入图片描述
  • 答案是:输出int
    在这里插入图片描述
  • 但是如果将参数为int类型的方法注释掉,那么Integer参数是能接受传的基本类型的(自动装箱)
    在这里插入图片描述
  • 为什么参数默认是int接收,而不是Integer呢?如果传一个Integer会是谁接收?答案是Integer接收Integer
    在这里插入图片描述
  • 那么再来个更骚的:如果一个是Integer搭配int,另一个是int搭配Integer,如果传两个say(1 , 1)会怎么样?
    在这里插入图片描述
  • 编译会出错!这就是聪明的编译器,它这个时候懵了,因为匹配到了两个重载方法…于是不干了!!
    在这里插入图片描述来了几个骚例子开开胃,接下来我们正式来看看方法重载!

1.1 涉及基本类型的重载

  • 就像上面的例子:基本类型自动装箱,转为包装类型,这其中一旦涉及了方法重载,就会容易造成一些混淆

  • 总结一下步骤如下:
    step1: **一般基本类型,都是默认先找有没有对应的基本类型;
    step2: 如果没有相同的基本类型,那么就会按照“扩展转换”去找有没有比自己更够记录更多信息的类型,能够承载自己实参的值。
    step3:如果还是没有的话,再找有没有对应的包装类型!(一定是对应的包装类型。。这里不存在扩展转换的说法…int不能通过Float类型承载)

关于什么是扩展转换,以及什么是窄化转换,在我的Java编程思想读书总结中也有汇总,详细参考 文章 的#3.4

另外:(char比较特殊!找不到自己对应的char类型,它会再尝试去找int类型,int都找不到那么会去找再扩展的类型long,没有long的话,会考虑浮点类型,先找float再找double,如果还是没有才会去试着找Character【如下图】)

下面是char转int
在这里插入图片描述下面是char转float
在这里插入图片描述


1.2 重载涉及的窄化转换

  • 因为当时说了,编译器不会替我们承担精度丢失的风险,除非我们截尾,或者舍入的方式放弃精度,进行窄化转换。因此如果没有手动的操作,编译器是不会编译通过的!(如图)
    在这里插入图片描述除非我们进行手动截尾、或者舍入(我这里就截尾吧)
    在这里插入图片描述

1.3 重载涉及包装类型向基本类型转换

  • 包装类型转基本类型就是上面讨论的,#2(涉及基本类型的重载)的反向操作
  • 就像下面这个Integer :(1.会先找参数为Integer的;2.再找Integer对应的基本类型int,3.再找int基本类型的扩展转换的long,float或者double【先找long,不行找float,再找double】)
    在这里插入图片描述

2.不可以按照方法的返回值区分重载方法

  • 这点非常好理解:假如可以按照返回值来区分重载方法,假如一个方法A返回值是String类型,另一个返回void,那么我调用A的时候:
  • (站在程序员的角度)我想调用有String返回值的A方法,但是又不想去处理这个返回值,因此仅仅调用A方法,但是不存储返回的值。。
  • (那么这个时候,站在编译器的角度)它根本不知道你原来是想用String返回值的A方法,他只知道一调用了A方法仅此而已。。因此它模棱两可,这个时候就会出现编译错误。
  • 因此是不会存在按照方法返回值来区分重载方法的!

3.不可以按照方法的权限控制区分重载方法

  • 不可以通过权限控制修饰符来控制不同的重载方法!

  • 返回值都区分不了重载的方法!权限控制就更别想了。。。我在同一个类中调用的方法,编译器是不可能直到我想要的是public还是private方法的。
    在这里插入图片描述


【end】

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:01:22  更:2021-09-26 10:04:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:16:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码