1. 方法名、参数列表必须相同
2. private方法不能被重写
3. 子类抛出的异常范围小于等于父类
4. 子类返回值范围小于等于父类
5. 子类访问修饰符范围大于等于父类
1、2两点就不解释了,主要看后面三点
举个栗子,IOException是Exception的子类,我们来看下面这段代码
class Animal {
protected void foo() throws IOException{}
}
class Dog extends Animal{
protected void foo() throws Exception {} // 假设这个方法没有错误
}
class MainClass{
public static void main(String[] args) {
Animal animal = new Dog(); // Java继承是向下兼容的, 多态的体现
try {
animal.foo();
} catch (IOException e) {
e.printStackTrace();
}
}
}
从main方法中可以看到, 我们通过try-catch来捕获父类方法中抛出的异常,而子类中的异常却没有处理, 这就存在很大的安全隐患,个人认为这些规则都是由于java的多态特性。
至于4、5两点就留给小伙伴们去思考:)