重载和重写的区别以及应用场景
一、重写(Override)
子类继承父类,子类重写父类中的所有公共方法,覆盖父类的方法并对其重写。
注意事项:
重写前后方法名相同;参数列表相同; 返回值相同
子类重写的方法所抛出的异常必须与父类中的被重写方法的异常一致,或者不能比父类的异常范围更大。
父类的私有方法不能被重写,如果子类非要写这个同名方法,只是定义了一个与父类方法相同的新方法,而并不是重写父类的方法。
子类重写方法的访问权限不能低于父类方法中的访问权限,即子类的访问权限可以>=父类。j举个例子:父类是public 子类也可以是public,但是不可以是private;父类是private,子类可以是public或者private等等,只要比private权限大的都可以。
二、重载
重载是多态性的一种表现。重载是指在一个类中定义了多个同名的方法,但他们的参数列表是不同的,也就是说有不同的参数个数或有不同类型的参数类型。
注意事项:
重载是通过方法中参数的不同来区分的,包含参数个数、参数类型、参数顺序等等。
如果父类方法访问权限为private,那么子类就不能对其进行重载;如果子类写了这个同名的方法,那只是定义了一个与父类方法相同的新方法,并不会得到重载的效果。
三、重载与重写的区别
重写时子类继承父类的方法,涉及到两个类;重载是同一个类方法之间的关系,只是参数或者参数类型不同,在一个类中。
重写的参数列表相同,重载的参数列表不同。
四、重写和重载的应用场景
在类中,要以统一的方式处理不同类型数据的时候,可以用重载。重载是多样性,是多态类型的演示,不修改原方法及源代码的基础上对方法进行扩展或增强时,使用重写。
重写的前提是继承,子类继承父类,子类才可以继承父类中的公有方法,增加新的功能、在原有的代码基础上对方法进行扩展和增强,需要用重写,提高了程序的多样性。重写时,参数列表,返回值得类型不能修改,异常可以减少或者删除,不能抛出新的异常或者比父类异常更广的异常,方法的访问权限可以降低,但是不能比父类权限高。
重载是构造器的重载,构造器重载后,提供多种形参形式的构造器,可以应对不同的业务需求,加强程序的健壮性和可扩展性。重载必须要修改方法(构造器)的形参列表,可修改返回值类型,也可修改访问权限(异常);使用范围是在同一个类中,目的是对构造器进行功能扩展,以应对多业务场景的不同使用需求。