Java 重载和覆盖区别,在本教程中,我们将讨论 Java 中的重载和覆盖之间的区别。如果您不熟悉这些条款,请参阅以下帖子:
在 Java 中重载与覆盖
- 重载发生在编译时,而重载发生在运行时:重载方法调用与其定义的绑定发生在编译时,但覆盖的方法调用绑定到其定义发生在运行。
- 静态方法可以重载,这意味着一个类可以有多个同名的静态方法。即使在子类中声明相同的静态方法,它与父类的相同方法无关,也无法覆盖静态方法。
- 最基本的区别是重载是在同一个类中完成的,而覆盖基类和子类是必需的。覆盖是关于为父类的继承方法提供特定实现。
- 静态绑定用于重载方法,动态绑定用于覆盖/覆盖方法。
- 性能:与覆盖相比,重载提供了更好的性能。原因是覆盖方法的绑定正在运行时完成。
private
和final
方法可以重载但不能覆盖它们。这意味着一个类可以有多个具有相同名称的私有/最终方法,但子类不能覆盖其基类的私有/最终方法。- 返回类型的方法在方法重载的情况下无关紧要,可以相同或不同。但是,在方法覆盖的情况下,覆盖方法可以具有更具体的返回类型。
- 在进行方法重载时,参数列表应该不同。方法重载中的参数列表应该相同。
重载示例
//A class for adding upto 5 numbers
class Sum
{
int add(int n1, int n2)
{
return n1+n2;
}
int add(int n1, int n2, int n3)
{
return n1+n2+n3;
}
int add(int n1, int n2, int n3, int n4)
{
return n1+n2+n3+n4;
}
int add(int n1, int n2, int n3, int n4, int n5)
{
return n1+n2+n3+n4+n5;
}
public static void main(String args[])
{
Sum obj = new Sum();
System.out.println("Sum of two numbers: "+obj.add(20, 21));
System.out.println("Sum of three numbers: "+obj.add(20, 21, 22));
System.out.println("Sum of four numbers: "+obj.add(20, 21, 22, 23));
System.out.println("Sum of five numbers: "+obj.add(20, 21, 22, 23, 24));
}
}
输出:
Sum of two numbers: 41
Sum of three numbers: 63
Sum of four numbers: 86
Sum of five numbers: 110
这里我们有 4 个版本的相同方法add
。我们在这里重载方法add()
。
覆盖示例
package beginnersbook.com;
class CarClass
{
public int speedLimit()
{
return 100;
}
}
class Ford extends CarClass
{
public int speedLimit()
{
return 150;
}
public static void main(String args[])
{
CarClass obj = new Ford();
int num= obj.speedLimit();
System.out.println("Speed Limit is: "+num);
}
}
输出:
Speed Limit is: 150
这里Ford
类的speedLimit()
方法覆盖了类CarClass
的speedLimit()
方法。