如何解释Java中重写的规则?

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两点就留给小伙伴们去思考:)

发布了21 篇原创文章 · 获赞 6 · 访问量 858

猜你喜欢

转载自blog.csdn.net/BOOM_haha/article/details/88409174
今日推荐