java重载方法匹配的优先级

本文详细解析了Java中的方法重载(Overload)与重写(Override)的区别及应用场景,通过具体实例展示了如何根据参数列表的不同来确定方法的调用,包括父类与子类间的相互作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.由于定义了同名的方法,不同参数列表导致的重载。
2.由于继承导致的重载:父类有非私有方法的方法A,子类又定义了同名的方法A,此时如果二者参数列表相同,会发生方法的重写(Override),此时调用子类对象的方法A只能是子类的方法,父类方法在子类中相当于不存在;如果二者参数列表不同,会发生重载(Overload),父类方法和子类方法同时存在于子类中,和单独在子类中定义重载方法效果一样,匹配的优先级也是相同的。
3.重载方法的优先级:
a.先匹配参数个数
b.参数类型的最佳匹配:直接所属类
c.如果没有找到直接所属类,会发生向上转型,直至找父类参数,直观上查找顺序为:包装类-》父类-》接口(不一定准确,《深入理解Java虚拟机》有更详细的描述)
d.如果向上转型仍无法匹配,则查找可变参数列表
e.以上无法匹配返回找不到方法错误。

参考示例:

public class OverloadTest {

    public static void main(String[] args) {

        A a = new A();
        B b = new B();
        C c = new C();

        a.show(c);
        b.show(b);
        b.show(c);
        c.show(a);
        c.show(b);
        c.show(new Integer(10));
    }

}

class A {
    public void show(B b) {
        System.out.println("b in A");
    }
}

class B extends A {
    public void show(A a) {
        System.out.println("a in B");
    }

    public void show(C... c) {
        System.out.println("c... in B");
    }

}

class C extends B {
    public void show(A a) {
        System.out.println("a in c");
    }

    public void show(C c) {
        System.out.println("c in c");
    }

    public void show(Object obj) {
        System.out.println("obj in c");
    }
}

结果输出:
b in A
b in A
b in A
a in c
b in A
obj in c


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值