这里有个覆盖的概念,覆盖和重写是一个意思,但是英文在翻译Override时翻译为覆写,覆盖,重载,这就坑爹了,但是我们讲究的是一个共识,重载是同类的同名方法的不同参数,重写是子类重写父类方法要求参数一致。
1 重写(Override)
从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下,
对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。
方法的重写需要符合下面的三个要点:
1.“==”: 方法名、形参列表相同。
2.“≤”:返回值类型和声明异常类型,子类小于等于父类。
3.“≥”: 访问权限,子类大于等于父类。
1.1 方法重写实例:
/** * 测试重写(override)/覆盖 * @author 赵广陆 * */ public class TestOverride { public static void main(String[] args) { Horse h = new Horse(); h.run(); } } class Vehicle { public void run(){ System.out.println("跑...."); } public void stop(){ System.out.println("停止!"); } public Person whoIsPsg(){ return new Person(); } } class Horse extends Vehicle { public void run(){ System.out.println("四蹄翻飞,嘚嘚的。。。"); } public Student whoIsPsg(){//返回值类型小于等于父类的类型 return new Student(); } }
运行效果:
2 总结:
- 发生在父类与子类之间
- 方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
- 访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
- 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常