美文网首页
方法重载

方法重载

作者: 实力战五渣 | 来源:发表于2019-03-23 11:13 被阅读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

相关文章

  • C#多态的表现-方法重载,方法重写以及密封类的特点

    方法重载 方法重载:构造函数就属于特殊的方法重载 方法重载:是指同一个类中相同方法的不同行为 方法重载的特点: 1...

  • OOP多态和密封类

    学习oop多态 1.方法重载 2.方法重写 3.里氏替换原则 方法重载:构造函数属于特殊的方法重载 方法重载是指同...

  • 方法的定义与使用(方法重载)

    方法重载 方法重载指的是方法名称相同,参数的类型或个数不同。范例:实现方法重载 范例:观察如下程序

  • 方法重载与方法重写(@Overload @Override)

    java方法重载和方法重写(方法覆盖)的区别: 方法重载: Overload 方法重写: Override 批判,...

  • 方法重载

    方法重载 21. 辨别方法重载 在调用重载方法时,编译器会根据方法的参数个数、参数类型和方法属性(const 方法...

  • Java重载

    重载(Overlaod):表示两个或多个方法名字相同,但方法参数不同。 代码: 普通方法重载 方法中也可以嵌套重载...

  • c++快速入门7:类和对象B:重载、继承和重写

    重载方法(Overloading) 就像函数重载,类方法也可以被重载--包括构造方法。 继承类的属性 派生类除了自...

  • OOP(多态,重载,重写,虚方法,密封类)

    多态 学习OOp多态*1.方法重载*2.方法重写*3.里氏替换原则**方法重载:构造函数就属于特殊的方法重载*方...

  • Java面试题

    1、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 答:方法的重载...

  • JVM方法调用

    方法重载和方法重写多态是面向对象程序设计的重要特性,方法重载和方法重写是Java语言实现多态的主要形式。方法重载指...

网友评论

      本文标题:方法重载

      本文链接:https://www.haomeiwen.com/subject/hnbjvqtx.html