方法覆写的原则(一同两小一大)
一同:方法签名必须相同
两小:子类方法声明的返回值类型是和父类方法的返回值相同或者是其子类
子类方法抛出的异常类型和父类方法声明抛出的异常类型相同或是其子类
一大:子类方法的访问权限比父类方法访问权限相等或更大.
判断是否是覆写方法的必杀技:@Override标签;
若方法是覆写方法,在方法前贴上该标签,编译通过,否则编译出错.
看如下代码:
superCLass clz = new subClass();
clz.doWork(),究竟会产生什么情况呢?
注意clz的编译类型是superClass,真是类型是subClass
1.父类存在该方法,而且没被private修饰,换句话说能被继承。会执行父类的方法
2.父类中没有该方法,子类中有该方法。编译出错,因为编译器回去检查声明类型中即父类有没该方法,没有则报错。
3.父类和子类都有该方法,多态,运行时表现出子类的具体特征,也就是调用子类的doWork()
3.父类和子类都有该方法,而且是静态的。此时会执行父类的方法。对象调用静态方法,实际上还是类名调用。clz的编译类型是superClass,所以执行父类的doWork()