java面试题0001-区分类中重载方法的依据是什么?
到底是根据什么来区分类中重载的方法?
A:不同的返回值类型。
B:不同的参数类型。
C:不同的访问权限。
D:不同的参数名称。
解析:
Step1.我们先在DifferentiateReload类中创建一个无参无返回值的say()方法
package components.javaTest.day1_20200822; /**
* Question:
* 区分类中重载方法的依据是什么?
*/
public class DifferentiateReload {
public void say(){
System.out.println("A");
}
}

Step2.试着在该类中构造返回值不同的say()方法
public class DifferentiateReload {
public void say(){
System.out.println("A");
}
//新增返回值不同的say()方法
public String say(){
return "B";
}
}

此时我们可以看到编译报错了,编译器认为已经存在了say()方法,
换言之,两个方法无法被区分开来(我们可以想象一下,在调用该类的两个方法new DifferentiateReload().say(),
此时根本不需要知道say()返回的内容,系统也是脑壳疼不知道您是在调用哪一个,所以
A:不同的返回值类型。--->无法区别类中的重载方法。
Step3.在该类中构造访问权限不同的say()方法
package components.javaTest.day1_20200822; /**
* Question:
* 区分类中重载方法的依据是什么?
*/
public class DifferentiateReload {
public void say(){
System.out.println("A");
}
//新增权限不同的say()方法
private void say(){
System.out.println("C");
}
}

同样的,提示方法已经存在了,编译报错,
不同权限,无非是控制不同地方的调用,举个例子,
如果都在DifferentiateReload类中调用,
那么public、private、protected对应调用者都是没有区别,
系统还是无法得知你想调用的到底是哪个方法,所以
C:不同的访问权限。--->无法区别类中的重载方法。
Step4.在该类中构造参数名称不同的say()方法 在这里我们先后创建两个有参,且参数类型都为int,同时参数名称不同的say()
package components.javaTest.day1_20200822; /**
* Question:
* 区分类中重载方法的依据是什么?
*/
public class DifferentiateReload {
public void say(int age) {
System.out.println("I'm "+ age + "old.");
}
}
package components.javaTest.day1_20200822; /**
* Question:
* 区分类中重载方法的依据是什么?
*/
public class DifferentiateReload {
public void say(int age) {
System.out.println("I'm "+ age + "old.");
}
//新增一个有参,且参数类型为int,同时参数名称不同的say()
public void say(int money) {
System.out.println("I hava "+ money+ "yuan." );
}
}


可以看到,编译器在写say(int money)方法的时候,认为say(int)方法已经存在了。
很显然,对于编译器,你传一个int类型的年龄,和一个int类型的钞票其实对它来说没两样,
只要int类型的,我管你是什么含义,照收即可。也就是说,当你调用new DifferentiateReload(1)方法时,
编译器也不知道你需要调用哪个方法,所以
D:不同的参数名称。--->无法区别类中的重载方法。
Step5.在该类中构造参数类型不同say()方法
注意:参数类型不同可以有两种理解:
一、在参数个数、参数所处位置顺序相同的情况下,其对应的参数对象的类型不同
二、参数个数、参数所处位置的顺序、参数的类型其中一个或者多个不同
不管是哪种理解,不同的参数类型,就能正确地区分类中的重载方法,下面控制台打印出的就是调用多个say重载方法的输出结果。
package components.javaTest.day1_20200822; /**
* Question:
* 区分类中重载方法的依据是什么?
*/
public class DifferentiateReload {
public static void main(String[] args) {
say();
say(11);
say("11");
say(11, "11");
say("11", 11);
} public static void say() {
System.out.println("调用了无参无返回值的say");
} public static void say(int count) {
System.out.println("调用了参数为int无返回值的say");
} public static void say(String msg) {
System.out.println("调用了参数个数相同,类型不同,无返回值的say");
} public static void say(int count, String msg) {
System.out.println("调用了参数个数不同,类型不同,无返回值的say");
} public static void say(String msg, int count) {
System.out.println("调用了参数个数相同,类型相同,顺序不同,无返回值的say");
}
}

所以区分类中重载方法的依据是:
B:不同的参数类型。
非 淡 泊 无 以 明 志
非 宁 静 无 以 致 远 !
java面试题0001-区分类中重载方法的依据是什么?的更多相关文章
- 【Java面试题】解释内存中的栈(stack)、堆(heap)和静态存储区的用法
Java面试题:解释内存中的栈(stack).堆(heap)和静态存储区的用法 堆区: 专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型 ...
- 【转】常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)
ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. 这篇文章介绍的常见面试题是关于重载(overloading)方法和重写( ...
- Java面试题全集(上-中-下)及Java面试题集(1-50/51-70)
阅读量超百万级的文章,收藏并分享一下.感谢原创作者的总结 对初中级java开发人员有特别大的帮助,不论是技术点面试还是知识点总结上. Java面试题全集(上): https://blog.cs ...
- 四. Java继承和多态3. 继承中的方法的覆盖和重载
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...
- 如何在WebService中重载方法
1. 本来在WebService中这样写的重载方法,如下所示: [WebService(Namespace = "http://tempuri.org/")] [WebSer ...
- java面试题之Thread类中的start()和run()方法有什么区别
start()方法被用来启动新创建的线程,而且start()内部调用了run()方法, 区别: 当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动: start()方法才会启动新 ...
- java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?
在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...
- Java基础-重写-子类重写父类中的方法后执行情况
代码 public class Test { public static void main(String[] args) { Shape shape = new Circle(); System.o ...
- java面试题----IO流种类及接口方法
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...
随机推荐
- 9-Pandas之数据合并与轴向连接(pd.concat()的详解)
数据合并:由于数据可能是不同的格式,且来自不同的数据源,为了方便之后的处理与加工,需要将不同的数据转换成一个DataFrame. Numpy中的concatenate().vstack().hstac ...
- Python os.write() 方法
write()方法语法格式如下:高佣联盟 www.cgewang.com os.write(fd, str) 参数 fd -- 文件描述符. str -- 写入的字符串. 返回值 该方法返回写入的实际 ...
- duoxiao OJ #910 【高手训练】【动态规划】梦中漫步 期望 LCA
LINK:梦中漫步 当然也可以去一本通的Oj/loj上交(loj可能没有.. 期望好题.期望和dp往往是在一起的. 前置知识:1. 期望是线性可加的.2.和的期望等于期望的和. 从u出发每次随机选一条 ...
- luogu P6091 原根
LINK:原根 再复习一下原根 防止考场上要NTT求原根的时候不会求... 这道题要求求出n之内的所有原根 根据原根的定义. 原根指 若x对于模n的阶为phi(n)且\(1\leq x\leq n\) ...
- 云小课 | IPv4枯了,IPv6来了
摘要:本篇主要分享IPv4与IPv6的区别和IPv6的应用场景,助您快速理解华为云IPv6双栈及IPv6 EIP. IPv6的由来 上节课我们讲了公网IP与私网IP,了解了IP地址的一些知识. 我们一 ...
- demo3同通讯录展示的方式分组排序
按A-Z顺序分组展示 有些项目中会需要这样的需求.形成类似于上述的界面.类似于通讯录里边的排序.实现的效果:所有的数据展示的时候,能够分组展示.顺序按照A-Z的书序进行排列.如果不是以A-Z开头,则默 ...
- 迷之自信的Single_User Mode
Alter database Set Single_User 对于任何DBA来说,恐怕都不陌生.在我们需要获取数据库独占访问权来做一些数据库紧急维护的时候,这可能是大多数DBA的首选,但它真的可以实现 ...
- 解惑4:java是值传递还是引用传递
一.概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:"传参数就是值传递,传对象就是引用传递",后面进一步查找了相关资料和文章以后, ...
- Vue 引用图片的三种方式
首先给图片地址绑定变量 <template> <img :src="imgUrl"> </template> 在script中设置变量 < ...
- JS 节点笔记
h5新增自定义属性 为了保存并使用数据,有一些数据不必要保存到数据库中: data开头作为自定义属性并赋值 兼容性获取element.getAttribute("da ...