Урок 18

Исключения при наследовании


Существует два правила для контролируемых исключений при наследовании:

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

Пример 1. Исключения при наследовании

import java.io.IOException;

public class SuperClass {
    public SuperClass() throws IOException {
    }

    public void start() throws Exception {
        throw new IOException("Not able to open file");
    }
}
import java.io.IOException;

public class SubClass extends SuperClass {
    public SubClass() throws IOException, ArithmeticException {
    }

    public void start() throws IOException {
        //throw new Exception("Not able to start");
    }
}

Если в конструкторе будет выброшено исключение, объект создан не будет.

Пример 2. Исключение в конструкторе

public class ConstructorException {
    private int i;

    public ConstructorException(int i) {
        this.i = 20 / i;
    }

    public int getI() {
        return i;
    }
}
public class ExceptionInConstructorTest {
    public static void main(String[] args) {
        ConstructorException p = null;
        try {
            p = new ConstructorException(0);
        } catch (ArithmeticException e) {
            System.out.println("Гасим исключение конструктора.");
        }
        System.out.println(p.getI());
    }
}


0 comments
Leave your comment: