您的位置:首页 > 编程语言 > Java开发

think in java 学习笔记(一)方法重载

2015-09-09 22:02 495 查看
判断一个方法是否是一个合法的重载函数唯一的判断标准是:每一个重载方法都必须有一个独一无二的参数列表。和访问修饰符无关,和返回值无关。

1.和访问修饰符无关

public void f(){System.out.println("null");}
private void f(){System.out.println("null");}

这两句代码放在同一个类中,不能编译通过。

2.和返回值无关

public void f(){System.out.println("null");}
public int f(){System.out.println("null");}
这两句代码放在同一个类中,不能编译通过。

不同的参数列表有如下含义:

1.参数类型不一样

public void f(float x){System.out.println("float");}
public void f(double x){System.out.println("double");}
public void f(int x){System.out.println("int");}
public void f(Integer x){System.out.println("Integer");}
public void f(short x){System.out.println("short");}




2.参数的顺序不一样:

public void f(int x,short y){System.out.println("int+short");}
public void f(short x,int y){System.out.println("short+int");}


有一个可能会令人疑惑的问题,下面代码会匹配哪一个

        public void f(){System.out.println("null");}
public void f(int...x){System.out.println("...");}
public void f(int x){System.out.println("int");} public void f(Integer x){System.out.println("Integer");} public void f(short x){System.out.println("short");}
public void f(int x,int ...y){System.out.println("int + int ...");}
public void f(int x,int y){System.out.println("int+int");}
public void f(int x,short y){System.out.println("int+short");}
public void f(short x,int y){System.out.println("short+int");}
public void f(float x){System.out.println("float");} public void f(double x){System.out.println("double");}
public void f(Object x){System.out.println("Object");}


public void test1(){
f();
f(4);
f(1.1);
}
我们直接看运行结果

null

int

double

一目了然

f(),f(int ...x)当参数为空时,优先匹配f(),4默认是int类型,1.1默认匹配double类型.

那我们看如下的代码,将会匹配哪一种?

public void f(Object x){System.out.println("Object");}
public void f(Integer x){System.out.println("Integer");}
当我们输入4时,x讲呗包装成Integer类型,但是同时匹配f(Integer x) 和f(Object x)。将会匹配哪一个?

我们直接看运行结果

Integer

优先匹配最精确的类型

鄙人才疏学浅,如有疏漏,还请大家批评指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: