覆盖(Overriding)、隐藏(Hidden)、重载(Overloading)区别

在Java中,覆盖(Overriding)和隐藏(Hidden)是多态性的不同表现。

覆盖(Overriding):

当子类继承了父类并且定义了与父类相同名称和参数的方法时,我们说子类覆盖了父类的方法。这种情况下,子类对象调用该方法时会执行子类中的实现,而不是父类的。这是动态绑定的一种表现。

class Parent {
    void print() {
        System.out.println("Parent's print()");
    }
}
 
class Child extends Parent {
    @Override
    void print() {
        System.out.println("Child's print()");
    }
}
 
public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        p.print(); // 输出 "Child's print()"
    }
}

隐藏(Hidden):

当子类定义了与父类相同名称的方法,但参数不同时,这就是隐藏。隐藏的方法不是多态的,因此,子类对象调用该方法时会执行父类的实现。

class Parent {
    void print(int i) {
        System.out.println("Parent's print() with int parameter");
    }
}
 
class Child extends Parent {
    void print(String s) {
        System.out.println("Child's print() with String parameter");
    }
}
 
public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        p.print(5); // 输出 "Parent's print() with int parameter"
        p.print("test"); // 编译错误,Child类的print方法不可见
    }
}

重载(Overloading):

重载是指在同一个类中,定义了多个同名方法,但这些方法的参数类型、参数数量不同,这样的多个同名方法构成重载关系。

class Example {
    void print() {
        System.out.println("No parameter print()");
    }
 
    void print(int i) {
        System.out.println("Int parameter print()");
    }
 
    void print(String s) {
        System.out.println("String parameter print()");
    }
}
 
public class Main {
    public static void main(String[] args) {
        Example ex = new Example();
        ex.print(); // 输出 "No parameter print()"
        ex.print(5); // 输出 "Int parameter print()"
        ex.print("test"); // 输出 "String parameter print()"
    }
}

在这里,print() 方法名被用于三个不同的方法,每个方法都有不同的参数,这就是方法重载。调用时,根据传入参数的不同,Java 编译器会决定调用哪一个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值