到底是根据什么来区分类中重载的方法?

	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-区分类中重载方法的依据是什么?的更多相关文章

  1. 【Java面试题】解释内存中的栈(stack)、堆(heap)和静态存储区的用法

    Java面试题:解释内存中的栈(stack).堆(heap)和静态存储区的用法 堆区: 专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型 ...

  2. 【转】常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. 这篇文章介绍的常见面试题是关于重载(overloading)方法和重写( ...

  3. Java面试题全集(上-中-下)及Java面试题集(1-50/51-70)

    阅读量超百万级的文章,收藏并分享一下.感谢原创作者的总结 对初中级java开发人员有特别大的帮助,不论是技术点面试还是知识点总结上. Java面试题全集(上):     https://blog.cs ...

  4. 四. Java继承和多态3. 继承中的方法的覆盖和重载

    在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...

  5. 如何在WebService中重载方法

    1. 本来在WebService中这样写的重载方法,如下所示: [WebService(Namespace = "http://tempuri.org/")]    [WebSer ...

  6. java面试题之Thread类中的start()和run()方法有什么区别

    start()方法被用来启动新创建的线程,而且start()内部调用了run()方法, 区别: 当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动: start()方法才会启动新 ...

  7. java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?

    在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...

  8. Java基础-重写-子类重写父类中的方法后执行情况

    代码 public class Test { public static void main(String[] args) { Shape shape = new Circle(); System.o ...

  9. java面试题----IO流种类及接口方法

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种 ...

随机推荐

  1. 自学java,学多久可以自己找到工作?

    先以肯定的语气说明一下自学Java,多久可以找到工作:   按照目前Java的体系来说,Java的几个重点在于Javase.数据库.Spring全家桶系列的框架.而其他的在Java体系之内,会基础的操 ...

  2. MOS 预夹断到底是什么

    https://www.cnblogs.com/yeungchie/ MOS管就像一个开关,栅极(Gate)决定源极(Souce)到漏极(Drain)的沟道(Channel)是开还是关.以NMOS为例 ...

  3. C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记!

    今天我们继续来学习C语言的入门知识点 11. 作用域规则 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问.C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 ...

  4. ElasticSearch实战系列六: Logstash快速入门和实战

    前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

  5. Servlet容器启动过程

    参考:https://blog.csdn.net/fredaq/article/details/9366043 一.概念 所谓Servlet容器其实说白了是符合Servlet规范的Java web容器 ...

  6. Pandas 数据处理 | Datetime 在 Pandas 中的一些用法!

    Datatime 是 Python 中一种时间数据类型,对于不同时间格式之间的转换是比较方便的,而在 Pandas 中也同样支持 DataTime 数据机制,可以借助它实现许多有用的功能,例如 1,函 ...

  7. 002_HyperLedger Fabric安装部署

    上一次我们把HyperLedger Fabric的环境全部搭建好了,下面开始正式的HyperLedger Fabric安装部署 首先需要安装编译工具gcc,用命令yum install -y gcc安 ...

  8. 微信公众号怎么发PDF文件?

    微信公众号怎么发PDF文件?   我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众 ...

  9. Bytom Dapp 开发笔记(三):Dapp Demo前端源码分析

    本章内容会针对比原官方提供的dapp-demo,分析里面的前端源码,分析清楚整个demo的流程,然后针对里面开发过程遇到的坑,添加一下个人的见解还有解决的方案. 储蓄分红合约简述 为了方便理解,这里简 ...

  10. 漫画 | 到底是什么让IT人如此苦逼???

    写在最后 漫画是有点夸张,不过多少还是有点现实开发过程的影子! 老板很乐观,核心就是三个月上线,至于怎么办那是底下人的事. 产品很无奈,心里盘算着,万万不可在他这一环节耽误了进度,时间这么赶,先出个壳 ...