什么是重载?
重载(Overloading)是指在同一个类中定义多个具有相同的名称但参数列表不同的方法,由于编译器在调用重载方法时,会根据参数的类型和个数选择合适的方法进行调用。因此这些方法即使可以有不同的返回类型,但是不能仅仅通过返回类型的不同来进行重载,重载的目的是为了提供更多的方法选择,以适应不同的参数类型和个数,重载方法之间没有继承关系,它们是独立的。
什么是重写?
重写是多态性的重要体现之一,它是指在子类中可以定义名称,参数列表,返回值类型均与父类中某个方法完全相同的方法,我们就说子类中定义的这个方法覆盖了父类中的同名方法。重写的目的是为了改变方法的实现逻辑,使其适应子类的特定需求,在调用重写方法时,根据对象的实际类型来确定调用哪个方法,这称为动态绑定。
注意:方法重写时,方法名称,参数列表,返回值的类型是一定不能修改的,异常可以减少或者删除,但是不能抛出新的异常或者更广的异常,方法的访问权限可以降低限制,但是不能做更严格的限制。
重载重写如何选择?
重载实现的是多样:目的是提高程序的多样性和健壮性
,以适配不同场景使用时,使用重载进行扩展;
生活实例解释重载:
假设我们有一个面馆,对于面的种类可以进行重载,可以有拉面,手擀面,刀削面,细面,宽面等等。
重写实现的是增强:目的是在不修改原方法及源代码的基础上对方法进行扩展或增强时,使用重写;
生活实例解释重载:
假设顾客在我们的面馆中,点了拉面,我们不仅完成了拉面的制作,还给拉面中加了青菜,牛肉,这是重写。
当我们需要在同一个类中提供多个方法来处理不同的参数类型和个数时,可以使用重载。而当我们需要在子类中重新定义父类中已有的方法,以改变其实现逻辑时,可以使用重写。