重写和重载傻傻分不清?看完这篇秒懂!

软件求生 2024-11-10 10:50:36



Hello~大家好呀!今天咱们聊一聊Java中一个很重要的基础知识点——重写(Override)和重载(Overload)的区别!这个概念在面试中非常常见,也容易引发一些迷惑。如果有小伙伴对它们的区别还不清楚,这篇文章一定会帮助你在脑海中打下一根“钉子”,让你彻底搞懂它们!

目录

什么是方法重载(Overloading)

什么是方法重写(Overriding)

重写和重载的区别总结

重写和重载的常见面试考察点

什么是方法重载(Overloading)

方法重载指的是在同一个类中定义多个方法,这些方法名称相同,但它们的参数列表不同(包括参数的个数或类型不同)。这样在调用时,Java编译器会根据传递的参数来选择对应的方法。

1.1 方法重载的特征

相同的名称:重载的方法名必须相同。

不同的参数列表:重载方法的参数数量或者类型必须不同。

与返回类型无关:重载方法的返回类型可以相同,也可以不同,但仅靠返回类型不同不能实现重载。

编译期决定:重载是在编译期间由编译器决定的,即在代码编译阶段就能知道应该调用哪个方法。

1.2 举个例子

来看看方法重载的一个简单例子吧:

在上面的代码中,我们在OverloadExample类中定义了三个名为add的方法:

第一个方法接受两个整数;

第二个方法接受三个整数;

第三个方法接受两个浮点数。

尽管方法名相同,但因为它们的参数列表不同,所以编译器能够区分它们,并根据传递的参数数量和类型,自动选择适合的方法。

什么是方法重写(Overriding)

方法重写指的是在子类中重新定义一个父类已经存在的方法。这个重定义的方法具有相同的方法名、相同的参数列表和相同的返回类型,但实现的逻辑可以不同。方法重写是一种多态的实现方式。

2.1 方法重写的特征

相同的方法名:重写的方法必须和父类的方法名称相同。

相同的参数列表:重写方法的参数列表必须和父类的方法保持一致。

返回类型可以不同:重写方法的返回类型可以是父类返回类型的子类(协变返回类型)。

必须用@Override注解:在方法上使用@Override注解,不是强制要求,但推荐使用,可以避免一些拼写错误。

运行期决定:重写是在程序运行期间才决定调用哪个方法,属于动态绑定(晚绑定)。

2.2 举个例子

接下来我们看一个方法重写的例子:

在上面的代码中,Dog和Cat类都继承了Animal类,并且重写了sound方法。

在Dog类中,我们让sound方法输出“汪汪汪!”。

在Cat类中,我们让sound方法输出“喵喵喵!”。

在这种情况下,如果我们在运行时创建一个Dog对象或者Cat对象,并调用它们的sound方法,就会调用子类的方法,而不是父类的sound方法。

通过这种方式,程序能够根据具体的实例对象在运行时决定调用哪一个方法,这就是多态的体现。

重写与重载的区别总结

重写和重载的常见面试考察点

4.1 为什么方法重载和返回类型无关?

在重载时,Java编译器主要根据方法名称和参数列表来识别方法。返回类型不同不会帮助编译器区分出不同的方法签名,这就是为什么我们不能仅靠返回类型的不同来进行方法重载。

4.2 为什么重写方法要加上@Override注解?

@Override注解不是强制的,但推荐使用。加上@Override注解能帮助我们捕获代码中的拼写错误。比如,假设我们写public void sound()拼写成了public void soud(), 没有@Override,编译器不会提示我们方法没有正确重写。加上@Override注解就能在编译时捕获到错误。

4.3 重载与重写可以实现多态吗?

方法重载实现的是一种编译时的多态,它更多的是让方法调用变得灵活;

方法重写则是真正的运行时多态,它允许程序根据对象的实际类型调用对应的具体实现。

4.4 方法重写时,能不能抛出比父类方法更多的异常?

不可以!在重写方法时,子类方法声明的异常必须与父类方法的异常相同或是其子类。这是为了保证在多态使用时的异常一致性。这样父类引用可以安全地调用子类方法而不需要额外的异常处理。

END

重写和重载是Java多态实现的重要部分,通过这些基础知识的理解和掌握,我们可以更加灵活地设计代码,提升代码的可扩展性和可维护性。希望通过今天的讲解,大家能够更深入地理解Java中的重写与重载概念!如果大家有什么不懂的地方,记得随时留言问我哦!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!

0 阅读:1

软件求生

简介:从事软件开发,分享“技术”、“运营”、“产品”等。