欢迎访问宙启技术站
智能推送

Java函数中的重载与覆盖区别解析

发布时间:2023-06-21 17:29:15

Java函数中的重载和覆盖是两种不同的概念。

1. 重载(Overloading)

重载是指在同一个类中,有多个方法名相同但参数列表不同的方法。这种方法同名不同参的情况,就称之为方法的重载。在函数调用时,会根据实参的类型和个数的不同自动匹配相应的方法体,从而实现函数的重载。

注意点:

1. 重载的方法必须在同一个类中。

2. 重载只与方法名和参数列表有关,与返回值无关。

3. 重载的方法可以拥有不同的访问修饰符,可以抛出不同的异常,但不能仅仅是返回类型不同。

举例:

public class OverloadTest {
    public void test(int a) {}
    public void test(int a, int b) {}
    public void test(String s) {}
}

在上述代码中,test()方法被重载了3次,分别接受不同的参数类型和个数。

2. 覆盖(Overriding)

覆盖是指在子类中,重新定义了其父类中的某个方法。重写方法必须与父类方法有相同的方法名、相同的参数列表、相同或兼容的返回类型以及相同的访问修饰符。子类方法执行时,会先去调用父类中的同名同参数方法,然后再执行子类中的方法体。

注意点:

1. 覆盖方法必须在子类中。

2. 覆盖方法必须与父类方法的返回类型、方法名、参数列表相同。

3. 覆盖方法的访问修饰符不能低于父类方法的访问修饰符。

4. 覆盖方法不能抛出更多的异常。

举例:

public class Parent {
    public void test() {
        System.out.println("Parent test");
    }
}
 
public class Child extends Parent {
    @Override
    public void test() {
        System.out.println("Child test");
    }
}

在上述代码中,Child类中的test()方法覆盖了Parent类中的test()方法,因为两个方法具有相同的方法名和参数列表。

总结:

重载和覆盖是Java中两个重要的方法概念,重载是在同一个类中定义多个同名但参数不同的方法,而覆盖是在子类中定义与父类中同名同参数的方法。在编写程序时,需要注意它们的不同点和用法,以便正确的调用和重载各种方法。