- •Исключительные
- •План лекции
- •Э… Проблемы
- •Обработка ошибок
- •Подходы к обработке ошибок
- •Механизм обработки
- •Поиск обработчика исключения
- •Классификация исключений
- •Классификация исключений
- •Базовые классы исключений
- •Объявление исключений
- •Особенности объявления исключений
- •Особенности объявления исключений
- •Вызов метода со списком исключений
- •Важное замечание
- •Отлов исключений
- •Блок try
- •Блок catch
- •Блок catch
- •Блок finally
- •Выбрасывание исключений
- •Создание типов исключений
- •Отладка приложений
- •Преимущества от использования исключений
- •Наследование
- •План лекции
- •Наследование в Java
- •Расширение классов
- •Конструкторы дочерних классов
- •Порядок создания объекта
- •Забавный пример
- •И его результат
- •Совпадение имен методов в родительском и дочернем классах
- •Переопределение методов
- •Переопределение методов
- •Переопределение методов
- •Переопределение методов
- •Сокрытие полей
- •Еще пример
- •И его результат
- •Служебное слово super
- •Сокрытие статических членов
- •Сокрытие статических методов
- •Замечание
- •Завершенные методы и классы
- •Абстрактные классы и методы
- •Контракт класса
- •Наследование
- •Понятие интерфейса
- •Наследование в Java
- •Объявление интерфейсов
- •Константы в интерфейсах
- •Методы в интерфейсах
- •Расширение интерфейсов интерфейсами
- •Реализация интерфейсов классами
- •Интерфейс или абстрактный класс?
- •Интерфейс или абстрактный класс?
- •Ссылки интерфейсных типов
- •Использование типов
- •Пустые интерфейсы
- •Спасибо за внимание!
- •Дополнительные источники
Служебное слово super
Действует как ссылка на текущий экземпляр по контракту базового класса
Может быть использовано в теле любого нестатического члена класса
Формы использования
super(...)super.method(...)super.field
41
Сокрытие статических членов
Статические члены не могут быть переопределены, они скрываются
Обычно для доступа используется имя класса, поэтому проблем не возникает
Если используется ссылка, то учитывается объявленный тип ссылки, а не фактический тип объекта
42
Сокрытие статических методов
public class Animal {
public static void testClassMethod() { System.out.println("The class method in Animal");
}
}
public class Cat extends Animal { public static void testClassMethod() {
System.out.println("The class method in Cat");
}
public static void main(String[] args) { Animal myAnimal = new Cat();
myAnimal.testClassMethod();// The class method in Animal
Animal.testClassMethod(); // The class method in Animal
}
}
Замечание
Важно понимать, что:
Переопределение методов – фундаментальный механизм ООП, в частности, обеспечивающий полиморфизм
Сокрытие полей – последствие отсутствия ограничений на имена полей
Изменение типа метода (static/non static) в подклассе вызовет ошибку компиляции
44
Завершенные методы и классы
Завершенный метод не допускает переопределения
final public int getValue();
Завершенный класс не допускает расширения
final class MyClass {
...
}
45
Абстрактные классы и методы
Абстрактные методы описывают сигнатуру без реализации
abstract public int getValue();
Класс с абстрактными методами обязан быть абстрактным
Абстрактный класс не обязан иметь абстрактные методы
Абстрактный класс может иметь реализованные методы
abstract class MyClass {...}
абстрактными родительские реализованные методыСоздавать объекты абстрактных типов нельзя!
46
Контракт класса
Набор методов и полей класса, открытых для доступа извне тем или иным способом, в совокупности с описанием их назначения
Способ выражения обещаний автора относительно того, на что способен и для чего предназначен созданный тип
47
Наследование
Практическое воплощение наследования
Наследование контракта или типа, в результате чего производный класс получает тип базового, поэтому может быть использован полиморфным образом
Наследование способов реализации, в результате производный класс приобретает функциональные характеристики базового в виде набора доступных полей и методов
48
Понятие интерфейса
Позволяет описать тип в полностью абстрактной форме
Экземпляры интерфейсов создавать нельзя
Классы способны реализовывать один или несколько интерфейсов
Реализация классом интерфейса означает согласие класса на внешний контракт, описываемый интерфейсом
49
Наследование в Java
Виды наследования
Класс |
Наследование как внешнего |
контракта, так и реализации |
Расширяет класс
Реализует интерфейсы
Наследование ТОЛЬКО внешнего контракта
Интерфейс
Расширяет интерфейсы
50