老生常谈的重载与重写的区别
这是一个老生常谈的问题了,但是我却总是没搞清,我发誓,这次一定要搞清!🗡️
重写
重写(Override),他是父类和子类多态的一种体现。如果子类中定义了方法和父类中的方法方法名和参数都相同,那么我们说子类重写了父类的方法。
重载
重载(Overload),他是一个类中多态性的体现。如果一个类中定义了多个同名的方法,他们参数列表不同,我们称之为方法的重载。
区别
重写是父类和子类的多态性,是子类对父类的函数的重新实现。函数名和参数与父类一样,但是实现体不一样。
重载是一个类中多态性的一种表现。指同一个类中不同的函数使用相同的函数名,但是函数的参数个数或类型不同。
-
重载可以有不同的返回类型、不同的访问修饰符、抛出不同的异常。调用的时候根据函数的参数来区别不同的函数。
-
重写的话严格把握三同、一大、一小。
三同:
参数列表必须完全与被重写的方法相同。
返回类型必须与被重写的方法相同。
方法名相同。
一大:
重写的方法的访问权限一定要比父类的方法访问权限更大。例如:父类方法声明是public的,子类不能声明是protected的。
一小:
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
java中的异常分为两大类, 强制性异常(CheckedException)和非强制性异常(UncheckedException)。 而java中除了RuntimeException外,都是强制性异常。 【也就是说,只有RuntimeException是非强制性异常】
强制性异常:所谓强制性异常就是在编写程序的过程中必需在抛出异常的部分try catch 或者向上throws异常。
非强制性异常:所谓非强制性异常就和上面相反了。不过你当然也可以try catch或者thows,只不过这不是强制性的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通