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

Java函数重载及重写

发布时间:2023-06-25 09:05:39

Java中的函数重载和重写是我们在面向对象编程中经常用到的特性。虽然两者都是用于函数的多态性,但它们之间还是有一定的区别的。接下来就让我们来一一分析。

一、函数重载

函数重载是指在一个类中定义多个函数,它们具有相同的函数名,但有不同的参数列表。这些不同的参数列表可以是参数类型、参数个数或参数顺序的不同组合。例如:

public class Demo {
    public void func(int a) {
        System.out.println(a);
    }
    public void func(double b) {
        System.out.println(b);
    }
    public void func(int a, int b) {
        System.out.println(a + b);
    }
}

在上面的代码片段中,我们定义了一个Demo类,其中有三个func()函数,分别接受int类型参数、double类型参数和两个int类型参数。这就是Java的函数重载,同一个函数名称,但却有不同的参数列表,因此,Java可以根据传递给函数的参数类型和数量来判断应该调用哪个函数。

二、函数重写

重写是指子类重新定义父类中已有的函数。因此,重写的方法需要具有相同的名称、参数列表和返回类型。子类重写一个已有的方法时,可以通过使用关键字“@Override”,来指出这个方法是重写了父类中的方法,如果这个方法没有正确地覆盖父类中原来的方法,编译器会给出一个错误。

下面是一个简单的例子:

class Person {
    public void func() {
        System.out.println("Person func");
    }
}

class Student extends Person {
    @Override
    public void func() {
        System.out.println("Student func");
    }
}

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        p.func();

        Person s = new Student();
        s.func();
    }
}

在上面的代码中,我们定义了一个Person类,其中有一个func()函数,然后我们定义了一个Student类,它继承了Person类,并重写了func()函数。在main()函数中,我们先实例化一个Person对象,调用它的func()函数,输出的是”Person func”,接着我们实例化一个Student对象,并将其赋给一个Person类型的变量,然后调用它的func()函数,输出的是”Student func”。

在这里,我们可以看到,Java运行时会根据对象的类型来判断应该调用哪一个函数。在这种情况下,Person对象调用的是Person类中的func()函数,而Student对象调用的是Student类中重写的func()函数。这种行为就是Java的函数重写,它允许子类通过重写父类的方法,来改变父类方法的行为。

三、函数重载和函数重写的区别

函数重载和函数重写都是Java语言中实现多态性的两种方式,它们在一些表面上看起来很相似,但是它们之间却有一些重要的区别。

1. 函数名称和参数列表不同

函数的重载是允许Java在同一个类中定义多个具有相同名称但参数列表不同的函数。而函数的重写则是在父类和子类之间定义名称、参数列表和返回类型相同的函数。

2. 发生的时间不同

函数重载发生在一个类中,而函数重写是在子类中完成的。

3. 返回值类型

函数重载的返回值类型可以相同,也可以不同,但是函数重写的返回值类型必须相同。

4. 多态性机制不同

函数的重载是函数多态性中的静态多态性,这个多态性机制是在编译时发生的。而函数的重写是函数多态性中的动态多态性,这个多态性机制是在运行时发生的。

四、总结

在Java中,函数的重载和重写都是用于实现多态性的两种方式,在实际的开发中,我们会根据情况选择使用哪种多态性。在使用函数的重载时,我们需要关注参数列表的组合,因为Java会根据参数的不同选择应该调用哪一个函数;而在使用函数的重写时,我们需要关注函数的覆盖。如果没有使用Override关键字,那么在编译期间就无法发现错误。因此,使用函数的重载和重写时,需要根据实际情况进行选择,以便实现 的程序设计。