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

举报
_陈哈哈 发表于 2022/01/21 22:23:48 2022/01/21
【摘要】 在本文中,我们将讨论Java重载和覆盖之间的区别。如果您不熟悉这些术语,请参考以下文章: Java中的方法重载Java中的方法重写 Java中的重载与重载 重载在编译时发生,而重载在运行时发生:重载方法调用与其定义的绑定已在编译时发生,但是重载方法调用对其定义的绑定在运行时发生。静态方法可以重载,这意味着一个类可以具有多个同名的静态...

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

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

Java中的重载与重载

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

重载示例


  
  1. //A class for adding upto 5 numbers
  2. class Sum
  3. {
  4. int add(int n1, int n2)
  5. {
  6. return n1+n2;
  7. }
  8. int add(int n1, int n2, int n3)
  9. {
  10. return n1+n2+n3;
  11. }
  12. int add(int n1, int n2, int n3, int n4)
  13. {
  14. return n1+n2+n3+n4;
  15. }
  16. int add(int n1, int n2, int n3, int n4, int n5)
  17. {
  18. return n1+n2+n3+n4+n5;
  19. }
  20. public static void main(String args[])
  21. {
  22. Sum obj = new Sum();
  23. System.out.println("Sum of two numbers: "+obj.add(20, 21));
  24. System.out.println("Sum of three numbers: "+obj.add(20, 21, 22));
  25. System.out.println("Sum of four numbers: "+obj.add(20, 21, 22, 23));
  26. System.out.println("Sum of five numbers: "+obj.add(20, 21, 22, 23, 24));
  27. }
  28. }

输出:


  
  1. Sum of two numbers: 41
  2. Sum of three numbers: 63
  3. Sum of four numbers: 86
  4. Sum of five numbers: 110

在这里,我们有4个相同方法的版本add。我们在add()这里重载该方法。

覆盖示例


  
  1. package beginnersbook.com;
  2. class CarClass
  3. {
  4. public int speedLimit()
  5. {
  6. return 100;
  7. }
  8. }
  9. class Ford extends CarClass
  10. {
  11. public int speedLimit()
  12. {
  13. return 150;
  14. }
  15. public static void main(String args[])
  16. {
  17. CarClass obj = new Ford();
  18. int num= obj.speedLimit();
  19. System.out.println("Speed Limit is: "+num);
  20. }
  21. }

输出:

 
Speed Limit is: 150
 

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

文章来源: chensj.blog.csdn.net,作者:_陈哈哈,版权归原作者所有,如需转载,请联系作者。

原文链接:chensj.blog.csdn.net/article/details/104451669

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。