方法重载

2019-03-23  本文已影响0人  实力战五渣

方法重载Overload

方法重载是java/c++里面的一个特性,目的是为了可以在参数不同的情况下,访问同一个方法名的方法,前期主要用于类的构造器,因为类本身有一个默认的构造器(无参构造器),但如果不想以默认的构造器进行实例化对象,有想要创建对象,再根据构造器的定义,方法名与类型相同,所以由此引申出方法重载(Overload)

1 区分方法重载的方法

方法重载(Overload)最明显的区分方法就是 方法名相同 参数列表不同 包括<font color="red">参数列表的顺序</font>方法重载与返回值无关

因为有时候 执行方法的目的 并不在与返回值 而在于方法的副作用。

例如

public String loadTest(String s, int i){
    return "";
}
public String loadTest(int i, String s){
    return "";
}
//以上两个方法也是方法重载,但如果只是调整参数顺序的话,那重载也没啥意义了。

2 涉及基本类型的方法重载

基本类型在方法中可以从一个"较小"的类型自动提升到一个"较大"的类型,如下:

public class TestOverload {

    void f1(char i){
        System.out.print("f1(char)");
    }
    void f1(byte i){
        System.out.print("f1(byte)");
    }
    void f1(short i){
        System.out.print("f1(short)");
    }
    void f1(int i){
        System.out.print("f1(int)");
    }
    void f1(long i){
        System.out.print("f1(long)");
    }
    void f1(float i){
        System.out.print("f1(float)");
    }
    void f1(double i){
        System.out.print("f1(double)");
    }

    /*f2*/
    void f2(byte i){
        System.out.print("f2(byte)");
    }
    void f2(short i){
        System.out.print("f2(short)");
    }
    void f2(int i){
        System.out.print("f2(int)");
    }
    void f2(long i){
        System.out.print("f2(long)");
    }
    void f2(float i){
        System.out.print("f2(float)");
    }
    void f2(double i){
        System.out.print("f2(double)");
    }

    /*f3*/
    void f3(short i){
        System.out.print("f3(short)");
    }
    void f3(int i){
        System.out.print("f3(int)");
    }
    void f3(long i){
        System.out.print("f3(long)");
    }
    void f3(float i){
        System.out.print("f3(float)");
    }
    void f3(double i){
        System.out.print("f3(double)");
    }

    /*f4*/
    void f4(int i){
        System.out.print("f4(int)");
    }
    void f4(long i){
        System.out.print("f4(long)");
    }
    void f4(float i){
        System.out.print("f4(float)");
    }
    void f4(double i){
        System.out.print("f4(double)");
    }

    /*f5*/
    void f5(long i){
        System.out.print("f5(long)");
    }
    void f5(float i){
        System.out.print("f5(float)");
    }
    void f5(double i){
        System.out.print("f5(double)");
    }

    /*f6*/
    void f6(float i){
        System.out.print("f6(float)");
    }
    void f6(double i){
        System.out.print("f6(double)");
    }

    void f7(double i){
        System.out.print("f7(double)");
    }

    void testConstVal(){
        System.out.print("常量 5 : ");
        f1(5); f2(5); f3(5); f4(5); f5(5); f6(5); f7(5);
    }

    void testChar(){
        System.out.print("char : ");
        char x = 'x';
        f1(x); f2(x); f3(x); f4(x); f5(x); f6(x); f7(x);
    }
    void testInt(){
        System.out.print("int : ");
        int x = 3;
        f1(x); f2(x); f3(x); f4(x); f5(x); f6(x); f7(x);
    }

    void testShort(){
        System.out.print("short : ");
        short x = 3;
        f1(x); f2(x); f3(x); f4(x); f5(x); f6(x); f7(x);
    }

    void testLong(){
        System.out.print("long : ");
        long x = 3;
        f1(x); f2(x); f3(x); f4(x); f5(x); f6(x); f7(x);
    }

    void testFloat(){
        System.out.print("float : ");
        float x = 3;
        f1(x); f2(x); f3(x); f4(x); f5(x); f6(x); f7(x);
    }
    void testDouble(){
        System.out.print("double : ");
        double x = 3;
        f1(x); f2(x); f3(x); f4(x); f5(x); f6(x); f7(x);
    }

    public static void main(String[] args) {

        System.out.println("****开始测试***");
        TestOverload t = new TestOverload();
        t.testConstVal();
        System.out.println();
        t.testChar();
        System.out.println();
        t.testInt();
        System.out.println();
        t.testShort();
        System.out.println();
        t.testLong();
        System.out.println();
        t.testFloat();
        System.out.println();
        t.testDouble();
    }
}

//结果如下:
****开始测试***
常量 5 : f1(int)f2(int)f3(int)f4(int)f5(long)f6(float)f7(double)
char : f1(char)f2(int)f3(int)f4(int)f5(long)f6(float)f7(double)
int : f1(int)f2(int)f3(int)f4(int)f5(long)f6(float)f7(double)
short : f1(short)f2(short)f3(short)f4(int)f5(long)f6(float)f7(double)
long : f1(long)f2(long)f3(long)f4(long)f5(long)f6(float)f7(double)
float : f1(float)f2(float)f3(float)f4(float)f5(float)f6(float)f7(double)
double : f1(double)f2(double)f3(double)f4(double)f5(double)f6(double)f7(double)
Process finished with exit code 0

如上:如果基本类型参数在重载方法形参里面没有 会自动提升匹配形参里面有的重载方法。

如果传入的实际参数大于重载方法申明中的形式参数,一般编辑不会通过的,参数必须经过强转。

换句话说:

对于基本类型而言:小转大 可以转 例如 short 类型自动转化成 int 类型

​ 大转小 必须强转 否则编译不会通过 而且还会出现精度丢失的情况 例如 double -> float

上一篇下一篇

猜你喜欢

热点阅读