Философия Java


Ограничения исключений


Когда вы перегружаете метод, вы можете выбросить только те исключения, которые указаны в версии базового класса этого метода. Это полезное ограничение, так как это означает, что код, работающий с базовым классом, будет автоматически работать с любым другим объектом, наследованным от базового класса (конечно, это фундаментальная концепция ООП), включая исключения.

Этот пример демонстрирует виды налагаемых ограничений (времени компиляции) на исключения:

//: c10:StormyInning.java

// Перегруженные методы могут выбрасывать только те

// исключения, которые указаны в версии

// базового класса, или унаследованное от

// исключения базового класса.

class BaseballException extends Exception {} class Foul extends BaseballException {} class Strike extends BaseballException {}

abstract class Inning { Inning() throws BaseballException {} void event () throws BaseballException { // На самом деле ничего не выбрасывает

} abstract void atBat() throws Strike, Foul; void walk() {} // Ничего не выбрасывает

}

class StormException extends Exception {} class RainedOut extends StormException {} class PopFoul extends Foul {}

interface Storm { void event() throws RainedOut; void rainHard() throws RainedOut; }

public class StormyInning extends Inning implements Storm { // можно добавить новое исключение для

// конструкторов, но вы должны работать

// с базовым исключеним конструктора:

StormyInning() throws RainedOut, BaseballException {} StormyInning(String s) throws Foul, BaseballException {} // Обычный метод должен соответствовать базовому классу:

//! void walk() throws PopFoul {} //Ошибка компиляции

// Интерфейс НЕ МОДЕТ добавлять исключения к существующим

// методам базового класса:

//! public void event() throws RainedOut {}

// Если метод еще не существует в базовом классе

// исключение допустимо:

public void rainHard() throws RainedOut {} // Вы можете решить не выбрасывать исключений вообще,

// даже если версия базового класса делает это:

public void event() {} // Перегруженные методы могут выбрасывать




Начало  Назад  Вперед