方法重载和方法覆写的问题

Java语言中,方法重载和方法覆写之间的区别是什么?什么时候可以使用方法覆写呢?

方法重载是指在一个类中,方法名称相同而参数列表(参数个数、类型、顺序)不同,对权限符没有要求;\n方法重写是指子类重写父类的方法,方法的名称、参数列表全部相同,重写方法的权限符必须大于等于被重写方法的权限符

重载是同一个名字的函数,可以有不同类型、不同数量的参数。
覆写是实现某个接口或者继承某个类时,将这个接口或者类中的某个方法重新实现,函数名称和参数完全一致。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7780352
  • 这篇博客你也可以参考下:Java编程中在子类重载方法中调用父类中该方法时,该方法包含递归时出现的调用错误
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-类和对象》描述了如何编写创建对象的类,以及如何创建和使用对象。-课堂 中的内容
  • 除此之外, 这篇博客: 虚方法调用在Java虚拟机中的实现方式?中的 虚方法调用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用都会被编译成 invokeinterface 指令。

    这两种指令,均属于 Java 虚拟机中的虚方法调用。

    在绝大多数情况下,Java 虚拟机需要根据调用者的动态类型,来确定虚方法调用的目标方法。这个过程我们称之为动态绑定。

    那么,相对于静态绑定的非虚方法调用来说,虚方法调用更加耗时。

  • 您还可以看一下 赵庆元老师的全栈工程师手把手带你学Java语言课程中的 方法嵌套调用小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    方法重载和方法覆写的区别是什么?以及什么情况下应该使用方法覆写?

    方法重载和方法覆写是Java中两种重要的方法实现机制。

    方法重载指在一个类中定义多个方法,这些方法具有相同的名称,但参数列表不同,可以有不同的返回类型,实现不同的功能。

    方法覆写是子类对父类的和某个方法(具有相同的名称和参数列表)重新定义,重新定义后,子类可以使用自己的实现重写父类的方法,从而实现自己的功能。

    方法重载应该在满足以下条件时使用:

    需要给方法不同的参数类型,可以接受相同的方法名,从而提高代码的可读性和可用性。

    需要为相同的操作提供不同的方法名称,这些方法是同一个类或已知的子类的子集,但返回的类型可以不同。

    需要有不同的返回类型,但参数(名称和顺序)必须相同。

    方法覆写应该在满足以下条件时使用:

    一个子类想修改或添加一些新的功能;

    在继承关系中的子类中可以调用父类的方法,但有时候我们需要在子类中对父类的方法进行细节调整,这时候我们就需要使用方法覆写。

    示例:

    //方法重载 public class OverloadTest { public void test(){ System.out.println("test1"); } public void test(int a){ System.out.println("test2"); } public void test(int a,int b){ System.out.println("test3"); } public static void main(String[] args){ OverloadTest o=new OverloadTest(); o.test(); o.test(1); o.test(1,2); } }

    //方法覆写 class Animal{ public void move(){ System.out.println("动物可以移动"); } }

    class Dog extends Animal{ public void move(){ System.out.println("狗可以跑和走"); } }

    public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象

       a.move();// 执行 Animal 类的方法
       b.move();//执行 Dog 类的方法
    }
    

    }