方法重写(Override):子类完全将父类的方法进行复制,书写新的逻辑,从而覆盖掉父类的方法,称之为方法重写。父类方法无法满足子类方法需求时,子类对父类方法具体实现根据子类需求进行更改
使用场景:
-
在业务代码中,父类相关方法不予具体实现或简单实现,具体实现由子类进行重写覆盖
-
项目上线一段时间后,对项目进行维护升级或新增功能时父类方法具体实现无法满足当前已有子类或新增子类的功能时需要对父类方法进行重写
重写结构:
-
访问修饰词:子类重写方法访问修饰词大于等于父类方法修饰词范围
-
返回值类型:
-
若父类方法返回值类型为基本数据类型,则子类重写时返回值类型必须跟父类一致
-
若父类方法返回值类型为引用数据类型,则子类重写时返回值类型可以是父类引用数据类型或其子类
-
-
方法名:必须与父类一致
-
参数列表:必须与父类一致
-
抛出异常:子类重写父类方法时抛出的异常只能比父类更少,不能更多。且异常类型必须是父类抛出的异常类型或其异常子类
重写方法或属性:
-
具体是调用父类方法还是子类重写的方法看具体创建的是父类还是子类对象(创建的哪个对象就调用哪个对象的方法)------看对象,即动态绑定
-
具体是调用父类的属性值还是子类覆盖父类后的属性值看创建对象后接收的具体类型(接收的哪个类型就调用哪个类型的属性值)------看类型,即静态绑定
注意:
-
静态方法不能被重写,具体调用哪个类的静态方法看接收的类型(哪个类调静态方法,就调用哪个类的静态方法)