0
点赞
收藏
分享

微信扫一扫

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


在本文中,我们将讨论Java重载和覆盖之间的区别。如果您不熟悉这些术语,请参考以下文章:

  1. Java中的方法重载
  2. Java中的方法重写

Java中的重载与重载

  1. 重载在​​编译时​​​发生,而重载在​​运行时​​发生:重载方法调用与其定义的绑定已在编译时发生,但是重载方法调用对其定义的绑定在运行时发生。
  2. 静态方法可以重载,这意味着一个类可以具有多个同名的静态方法。静态方法不能被覆盖,即使您在子类中声明了相同的静态方法,也与父类的相同方法无关。
  3. 最基本的区别是重载是在同一个类中完成的,而要覆盖基类和子类则是必需的。重写就是为父类的继承方法提供特定的实现。
  4. ​​静态绑定​​​用于重载方法,​​动态绑定​​用于重载/覆盖方法。
  5. 性能:与覆盖相比,重载可提供更好的性能。原因是重写的方法的绑定是在运行时完成的。
  6. 私有方法和最终方法可以重载,但不能被覆盖。这意味着一个类可以具有多个同名的私有/最终方法,但是子类不能覆盖其基类的私有/最终方法。
  7. 在方法重载的情况下,方法的返回类型无关紧要,可以相同也可以不同。但是,如果方法被重写,则重写方法可以具有更特定的返回类型(​​请参阅this​​)。
  8. 执行方法重载时,参数列表应该不同。参数列表应与方法覆盖中的相同。

重载示例

//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

这里​​speedLimit()​​​的class方法​​Ford​​​是覆盖​​speedLimit()​​​class方法的​​CarClass​​。


举报

相关推荐

0 条评论