
- •Исключительные
- •План лекции
- •Э… Проблемы
- •Обработка ошибок
- •Подходы к обработке ошибок
- •Механизм обработки
- •Поиск обработчика исключения
- •Классификация исключений
- •Классификация исключений
- •Базовые классы исключений
- •Объявление исключений
- •Особенности объявления исключений
- •Особенности объявления исключений
- •Вызов метода со списком исключений
- •Важное замечание
- •Отлов исключений
- •Блок try
- •Блок catch
- •Блок catch
- •Блок finally
- •Выбрасывание исключений
- •Создание типов исключений
- •Отладка приложений
- •Преимущества от использования исключений
- •Наследование
- •План лекции
- •Наследование в Java
- •Расширение классов
- •Конструкторы дочерних классов
- •Порядок создания объекта
- •Забавный пример
- •И его результат
- •Совпадение имен методов в родительском и дочернем классах
- •Переопределение методов
- •Переопределение методов
- •Переопределение методов
- •Переопределение методов
- •Сокрытие полей
- •Еще пример
- •И его результат
- •Служебное слово super
- •Сокрытие статических членов
- •Сокрытие статических методов
- •Замечание
- •Завершенные методы и классы
- •Абстрактные классы и методы
- •Контракт класса
- •Наследование
- •Понятие интерфейса
- •Наследование в Java
- •Объявление интерфейсов
- •Константы в интерфейсах
- •Методы в интерфейсах
- •Расширение интерфейсов интерфейсами
- •Реализация интерфейсов классами
- •Интерфейс или абстрактный класс?
- •Интерфейс или абстрактный класс?
- •Ссылки интерфейсных типов
- •Использование типов
- •Пустые интерфейсы
- •Спасибо за внимание!
- •Дополнительные источники

Забавный пример
class SuperShow {
public String str = "SuperStr";
public void show() { System.out.println("Super.show(): " + str);
}
}
class ExtendShow extends SuperShow { public String str = "ExtendStr";
public void show() {
System.out.println("Extend.show(): " + str);
}
}
31

И его результат
public static void main(String[] args) { ExtendShow ext = new ExtendShow(); SuperShow sup = ext; System.out.println("ext.str = " + ext.str); System.out.println("sup.str = " + sup.str); ext.show();
sup.show();
}
ext.str = ExtendStr sup.str = SuperStr Extend.show(): ExtendStr Extend.show(): ExtendStr
32

Совпадение имен методов в родительском и дочернем классах
Сигнатуры различны
Перегрузка – добавляется метод с другими параметрами
Сигнатуры совпадают
Переопределение – замещение версии метода, объявленной в базовом классе, новой, с точно такой же сигнатурой
33

Переопределение методов
При обращении извне к методу объекта производного класса по ссылке его родительского типа всегда вызывается новая версия метода
Доступ к методу базового класса изнутри объекта дочернего класса может быть получен с помощью ключевого слова super
Уровень доступа к методу при переопределении не может сужаться
Методы private не переопределяются
34

Переопределение методов
class ParentClass {
public String getInfo() { return "parent"; }
}
class ChildClass extends ParentClass { public String getInfo() { return "child"; }
}
ChildClass child = new ChildClass(); System.out.println(child.getInfo()); // child
ParentClass parent = child; System.out.println(parent.getInfo()); // а тут?
35

Переопределение методов
class ParentClass {
private String getInfo() { return "parent"; }
}
public static void main(String[] args) { Parent object = new Child(); object.getInfo(); // а тут?
}
class ChildClass extends ParentClass {
// это не переопределенный метод!
public String getInfo() { return "child"; }
}
36

Переопределение методов
В предложении throws дочернего метода не может быть типов исключений, которые не совместимы с типами в throws базового метода (для checked исключений)
Переопределенный метод может быть снабжен модификатором abstract
Признаки synchronized, native и strictfp могут изменяться произвольно
37

Сокрытие полей
Поля не переопределяются, но скрываются
Тип поля при сокрытии можно изменить
Поле базового класса при сокрытии продолжает существовать, но недоступно через ссылку типа потомка, однако доступно по ссылке предка
Доступ можно получить с помощью ключевого слова super либо через ссылочную переменную родительского типа
Имеет право на существование следующая конструкция:
(VeryBaseClass) this
38

Еще пример
class SuperShow {
public String str = "SuperStr";
...
}
class ExtendShow extends SuperShow { public int str = 100500;
...
}
39

И его результат
public static void main(String[] args) { ExtendShow ext = new ExtendShow(); SuperShow sup = ext;
System.out.println("ext.str = " + ext.str); System.out.println("sup.str = " + sup.str); System.out.println("sup.str = " +
((SuperShow)ext).str);
}
ext.str = 100500 sup.str = SuperStr sup.str = SuperStr
40