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

	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. PHP dechex() 函数

    实例 把十进制转换为十六进制: <?phpecho dechex("30") . "<br>";echo dechex("10&qu ...

  2. PHP gd_info - 取得当前安装的 GD 库的信息

    gd_info — 取得当前安装的 GD 库的信息. 语法 array gd_info ( void )高佣联盟 www.cgewang.com 返回一个关联数组描述了安装的 GD 库的版本和性能. ...

  3. qemu 如何退出qemu

    如何退出qemu ctrl + a 放开后,再按下x 这里字母是小写!(不要按着大写键)

  4. LVS-DR:搭建HTTP和HTTPS负载均衡集群

    目录 LVS-DR实战:搭建HTTP和HTTPS负载均衡集群 1. 搭建lvs-dr模式的http负载集群 1.1 LVS上配置IP 1.2 RS上配置arp内核参数 1.3 RS上配置VIP 1.4 ...

  5. [转] SpringBoot返回json 数据以及数据封装

    作者:武哥     来源:武哥聊编程   https://mp.weixin.qq.com/s/QZk0sKxBX4QZiCTHQIA6pg 1. Spring Boot关于Json的知识点 在项目开 ...

  6. java数组的拷贝和扩容

    1.拷贝arraycopy方法 // 拷贝:arraycopy方法 // arraycopy // 第一个参数:原数组 // 第二个参数:原数组元素的起始位置 // 第三个参数:目标数组 // 第四个 ...

  7. 18 . Go之操作Mysql

    安装mysql wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y localinstall ...

  8. Kaggle-SQL(1)

    Getting-started-with-sql-and-bigquery 教程 结构化查询语言(SQL)是数据库使用的编程语言,它是任何数据科学家的一项重要技能. 在本课程中,您将使用BigQuer ...

  9. Vue老项目支持Webpack打包

    1.老的vue项目支持webpack打包 最近在学习Vue.js.版本是2.6,webpack的版本也相对较老,是2.1.0版本.项目脚手架只配置了npm run dev和npm run build. ...

  10. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...