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

	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. SpringBoot注解综合

    SpringBoot注解综合 @Bean 注解通常会应用在一些配置类(由@Configuration注解描述)中,用于描述具备返回值的方法,然后系统底层会通过反射调用其方法,获取对象基于作用域将对象进 ...

  2. Redis实现商品热卖榜

    Redis系列 redis相关介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...

  3. Python格式化字符串(f,F,format,%)

    # 格式化字符串: 在字符串前加上 f 或者 F 使用 {变量名} 的形式来使用变量名的值 year = 2020 event = 'Referendum' value = f'Results of ...

  4. /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint naughty_wozniak (444e26e0a2a3adb1ff88177ead86099ad64c0406afcec179ce7cfeef8ffa2d5c): (i

    /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity ...

  5. UI自动化填写问卷(selenium)+定时任务(懒人必备)

    1.自动填报 UI自动化 selenium 开发程序动机:天天有人催着填写问卷,弄的头大.主要还是懒的每天一个个去填写内容. 开发总时长:2个小时:学习+开发+修改 遇到的小问题: 在自动化填写地图的 ...

  6. 用python分析1225万条淘宝数据,终于搞清楚了我的交易行为

    大家好,我是黄同学

  7. Vue组件注册

    全局注册方法 Vue.component('my-component-name', { // ... 选项 ... }) Vue.component('component-a', { /* ... * ...

  8. 「MoreThanJava」Day 5:面向对象进阶——继承详解

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  9. CSDN新版Markdown编辑器(Alpha 2.0版)

    Markdown编辑器 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建 ...

  10. C#LeetCode刷题之#191-位1的个数(Number of 1 Bits)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4052 访问. 编写一个函数,输入是一个无符号整数,返回其二进制表 ...