2022-01-04 21:38:06
重载(overload)和重写(override)的区别如下:
定义与目的:
重载:在同一个类中,允许存在多个同名方法,但这些方法的参数列表(参数类型、个数或顺序)必须不同。重载的目的是提供多种方式来调用相同功能的方法,以适应不同的参数需求。
重写:在子类中重新定义父类中已有的方法,要求方法名、参数列表和返回类型必须完全相同。重写的目的是改变或扩展父类方法的行为,以适应子类的特定需求。
多态性:
重载:实现的是编译时的多态性,即在编译时根据调用方法的参数列表来确定具体调用哪个方法。
重写:实现的是运行时的多态性,即在运行时根据对象的实际类型来确定调用哪个方法。
发生位置:
重载:发生在同一个类中,或父类和子类之间(但通常指同一类中)。
重写:发生在子类与父类之间。
返回类型:
重载:对返回类型没有特殊要求,可以相同也可以不同。
重写:要求子类重写之后的方法与父类被重写方法有相同的返回类型(或子类型,在协变返回类型的情况下)。
异常处理:
重载:可以抛出不同的异常。
重写:重写之后的方法不能抛出比父类被重写方法更宽泛的异常(遵循里氏代换原则)。
访问权限:
重载:可以有不同的访问修饰符。
重写:子类方法的访问权限不能比父类被重写方法更低。
关于重载的方法能否根据返回类型进行区分: