Java教程23—Java中的方法重载和方法覆盖的区别

缺乏、安全感 2022-05-13 01:28 421阅读 0赞

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

  • 1、重载发生在编译时,而覆盖在运行时发生:
    重载方法调用与其定义的绑定在编译时发生,但是覆盖方法调用与其定义的绑定在运行时发生。
  • 2、静态方法可以重载,这意味着一个类可以有多个同名的静态方法。
    即使在子类中声明相同的静态方法,它与父类的相同方法无关,也无法覆盖静态方法。
  • 3、最基本的区别是重载是在同一个类中完成的,而覆盖是基类和子类必需的。
    覆盖是关于为父类的继承方法,子类提供特定实现。
  • 4、重载方法用于静态绑定,覆盖方法用于动态绑定。
  • 5、性能:与覆盖相比,重载提供了更好的性能。原因是覆盖方法的绑定正在运行时完成。
  • 6、private和final方法可以重载但不能覆盖它们。
    这意味着一个类可以有多个具有相同名称的private/final方法,但子类不能覆盖其基类的private/final方法。
  • 7、方法的返回值在方法重载的情况下无关紧要,它可以相同或不同(返回值一样的时候,参数列表个数、类型不能相同)。
    但是,在方法覆盖的情况下,覆盖方法可以具有更具体的返回类型。
  • 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. }
  29. Output:
  30. Sum of two numbers: 41
  31. Sum of three numbers: 63
  32. Sum of four numbers: 86
  33. 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. }
  22. Output:
  23. Speed Limit is: 150

这里speedLimit()的类方法Ford是重写类CarClass的speedLimit()方法。


原文地址:

  1. https://beginnersbook.com/2014/01/difference-between-method-overloading-and-overriding-in-java/

发表评论

表情:
评论列表 (有 0 条评论,421人围观)

还没有评论,来说两句吧...

相关阅读