Java类中方法重载

    |     2015年3月30日   |   Java面向对象   |     0 条评论   |    1734

同一个类里,多个方法可以同名,只要参数列表不同,这叫方法重载(method overloading)。参数列表也叫参数签名:类型、个数、顺序,有一项不同就算不同。只改参数变量名不算。

重载是面向对象的基本能力:同一套操作名,按参数选出合适的实现,少造一堆意义相近却名字不同的方法。

一、同名不同参

public class Demo {
    void test() {
        System.out.println("No parameters");
    }
    void test(int a) {
        System.out.println("a: " + a);
    }
    void test(int a, int b) {
        System.out.println("a and b: " + a + " " + b);
    }
    double test(double a) {
        System.out.println("double a: " + a);
        return a * a;
    }

    public static void main(String args[]) {
        Demo obj = new Demo();
        obj.test();
        obj.test(2);
        obj.test(2, 3);
        obj.test(2.0);
    }
}
// 运行结果:
// No parameters
// a: 2
// a and b: 2 3
// double a: 2.0

编译器按调用处的参数个数、类型去做重载分辨;匹配不上就编译报错。上面 test(2) 走 int 版,test(2.0) 走 double 版。

二、重载规则

项目 要求
方法名 必须相同
参数列表 必须不同(个数、类型或顺序)
返回类型 可以相同也可以不同;仅返回类型不同不能构成重载
构造方法 同样可以重载

原文有两处需要纠正:

  • final 方法不能被覆盖(override),但可以重载。原文写成「final 不能被重载」是把覆盖和重载弄混了。
  • static 方法同样可以重载。静态方法不能按实例动态覆盖,子类里同名同参的 static 是隐藏,不是覆盖;这和「能不能重载」不是一回事。

一句话总结:重载看方法名相同、参数列表不同;编译期按实参选型,单靠返回值变不了重载。

转载请注明来源:Java类中方法重载
本文链接地址:https://ai.zhousir.top/?p=80
回复 取消