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 在方法重载中,返回类型可以相同也可以不同,但只需要改变参数即可。 在方法覆盖中,返回类型必须相同或协变。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264497.html

(0)
上一篇 2022年6月7日
下一篇 2022年6月7日

相关推荐

发表回复

登录后才能评论