Переопределение метода в обработке исключений - PullRequest
0 голосов
/ 27 мая 2018

При обработке исключений известно, что, если метод суперкласса не объявляет исключение, переопределенный метод подкласса не может объявить проверенное исключение, но может объявить непроверенное исключение.Почему так?рассмотрим следующий пример:

import java.io.*;

class Parent {
    void msg() {
        System.out.println("parent");
    }
}

class TestExceptionChild extends Parent {
    void msg() throws IOException {
        System.out.println("TestExceptionChild");
    }

    public static void main(String args[]) {
        Parent p = new TestExceptionChild();
        p.msg();
    }
}

Что я пробовал:

Мы получаем ошибку компиляции здесь.Если мне нужно прочитать файл в переопределенном методе "msg", то я должен упомянуть "throws IOException" там.Но Java не позволяет им.Кто-нибудь может объяснить это?

1 Ответ

0 голосов
/ 27 мая 2018

Это происходит потому, что вы нарушаете принцип подстановки Лискова , то есть: вы не можете заменить экземпляр суперкласса одним из подклассов, потому что вы изменяете сигнатуру метода msg вродительский суперкласс.

В более общем классе метод msg не выдает никаких исключений, и вы хотите изменить подпись в подклассе, что явно недопустимо, поскольку оно нарушает договорoverride основной.

...