Erlo

java面试题0001-区分类中重载方法的依据是什么?

2020-08-26 21:00:21 发布   430 浏览  
页面报错/反馈
收藏 点赞

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

	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:不同的参数类型。


非  淡  泊  无  以  明  志
非 宁 静 无 以 致 远 !
登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认