Java中方法重载和方法覆盖的区别

Java中方法重载和方法覆盖的区别

方法重载:

方法重载是一种编译时多态性。在方法重载中,多个方法共享同一个方法名,但在类中具有不同的签名。在方法重载中,返回类型可以相同也可以不同,但是我们必须改变参数,因为在java中,我们不能仅仅通过改变方法的返回类型来实现方法重载。

方法重载示例:

import java.io.*;

class MethodOverloadingEx {

    static int add(int a, int b)
    {
    return a + b;
    }

    static int add(int a, int b, int c)
    {
        return a + b + c;
    }

    public static void main(String args[])
    {
        System.out.println("add() with 2 parameters");
        System.out.println(add(4, 6));

        System.out.println("add() with 3 parameters");
        System.out.println(add(4, 6, 7));
    }
}

运行结果:

add() with 2 parameters
10
add() with 3 parameters
17

方法覆盖:

方法覆盖是一种运行时多态性。在方法覆盖中,派生类提供了基类或父类已经提供的方法的具体实现。在方法覆盖中,返回类型必须相同或协变(返回类型可能与派生类的方向相同)。

方法覆盖示例:

import java.io.*;

class Animal {

    void eat()
    {
        System.out.println("eat() method of base class");
        System.out.println("eating.");
    }
}

class Dog extends Animal {

    void eat()
    {
        System.out.println("eat() method of derived class");
        System.out.println("Dog is eating.");
    }
}

class MethodOverridingEx {

    public static void main(String args[])
    {
        Dog d1 = new Dog();
        Animal a1 = new Animal();

        d1.eat();
        a1.eat();

        Animal animal = new Dog();
        // eat() method of animal class is overridden by
        // base class eat()
        animal.eat();
    }
}

运行结果如下:

eat() method of derived class
Dog is eating.
eat() method of base class
eating.
eat() method of derived class
Dog is eating.

解释:

在这里,可以看到在派生类名称 Dog 中覆盖了一个方法 eat() ,而该派生类名称已经由基类名称 Animal 提供。
当我们创建类 Dog 的实例并调用 eat() 方法时,我们看到只运行派生类 eat() 方法而不是基类方法 eat() ,而当创建类Animal 的实例并调用 eat() 方法,看到只运行基类 eat() 方法而不是派生类方法 eat()

因此,很明显,在方法覆盖中,方法在运行时绑定到实例,这是由 JVM 决定的。这就是为什么它被称为运行时多态性。

Java中方法重载和方法覆盖的区别是:

编号 方法重载 方法覆盖
1 方法重载发生在课堂上。 方法覆盖在具有继承关系的两个类中执行。
2 方法重载可能需要也可能不需要继承。 方法覆盖总是需要继承。
3 方法重载是一种编译时多态性。 方法覆盖是一种运行时多态性。
4 有助于增加程序的可读性。 方法覆盖用于授予其父类或超类已经提供的方法的具体实现。
5 在方法重载中,方法必须同名不同签名。 在方法覆盖中,方法必须具有相同的名称和相同的签名。
6 在方法重载中,返回类型可以相同也可以不同,但只需要改变参数即可。 在方法覆盖中,返回类型必须相同或协变。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程