n Сигнатуры различны
Перегрузка – добавляется метод с другими параметрами
n Сигнатуры совпадают
Переопределение – замещение версии метода, объявленной в базовом классе, новой, с точно такой же сигнатурой
Переопределение методов
n При обращении извне объекта производного класса к его методу всегда вызывается новая версия метода
n Доступ к методу базового класса изнутри объекта дочернего класса может быть получен с помощью ключевого слова super
n Уровень доступа при переопределении не может сужаться
n Методы private не переопределяются
Переопределение методов
n В предложении throws дочернего метода не может быть типов исключений, не совместимых с типами в предложении throws родительского метода
n Переопределенный метод может быть снабжен модификатором abstract
n Признаки synchronized, native и strictfp могут изменяться произвольно
Замечание
Важно понимать, что:
n Переопределение методов – фундаментальный механизм, позволяющий изменить реализацию класса без изменения типа
n Сокрытие полей – последствие отсутствия ограничений на имена полей
Вопрос 39 Расширение классов. Сокрытие полей. 38,40-42 Лекция Исключительные ситуации и их обработка
Сокрытие полей
n Поля не переопределяются, но скрываются
n Поле базового класса при сокрытии продолжает существовать, но недоступно непосредственно по имени
n Доступ можно получить с помощью ключевого слова super либо через ссылочную переменную родительского типа
n Имеет право на существование следующая конструкция: ( VeryBaseClass ) this
Сокрытие статических членов
n Статические члены не могут быть переопределены, они скрываются
n Обычно для доступа используется имя класса, поэтому проблем не возникает
n Если используется ссылка, то учитывается объявленный тип ссылки, а не фактический тип объекта
Давешний результат
public static void main(String[] args) {
ExtendShow ext = new ExtendShow();
SuperShow sup = ext;
ext.show();
sup.show();
System.out.println("ext.str = " + ext.str);
System.out.println("sup.str = " + sup.str);
}
Extend.show: ExtendStr
Extend.show: ExtendStr
ext.str = ExtendStr
sup.str = SuperStr
Замечание
Важно понимать, что:
n Переопределение методов – фундаментальный механизм, позволяющий изменить реализацию класса без изменения типа
n Сокрытие полей – последствие отсутствия ограничений на имена полей
Вопрос 40 Ключевое слово super и его использование.
39 Лекция Исключительные ситуации и их обработка
Служебное слово super
n Действует как ссылка на текущий экземпляр по контракту базового класса
n Может быть использовано в теле любого нестатического члена класса
n Формы использования
l Вызов конструктора родительского класса
super (...)
l Вызов метода родительского класса
super . method (...)
l Обращение к полю родительского класса
super . field
Вопрос 41 Абстрактные и завершённые классы в Java
43-44 Исключительные ситуации и их обработка
Завершенные методы и классы
n Завершенный метод не допускает переопределения
final public int getValue() { ... }
n Завершенный класс не допускает расширения
final class MyClass {
//...
}
Абстрактные классы и методы
n Абстрактные методы описывают сигнатуру без реализации
abstract public int getValue();
n Класс с абстрактными методами обязан быть абстрактным
abstract class MyClass {...}
n Расширяющий класс может перекрыть своими абстрактными родительские реализованные методы
n Абстрактный класс не обязан иметь абстрактные методы
n Создавать объекты абстрактных типов нельзя!
Вопрос 42 Интерфейсы. Общий синтаксис. Пустые интерфейсы. 45,55 Лекция Исключительные ситуации и их обработка
Понятие интерфейса
n Позволяет описать тип в полностью абстрактной форме
n Экземпляры интерфейсов создавать нельзя
n Реализация классом интерфейса означает согласие класса на внешний контракт, описываемый реализуемым интерфейсом
n Классы способны реализовывать один или несколько интерфейсов
Пустые интерфейсы
n Существуют пустые интерфейсы, объявления которых не содержат ни констант, ни методов
n Реализация таких интерфейсов обычно означает способность объекта к чему-либо
n Ссылка такого типа редко имеет смысл (т.к. внешний контракт пуст)
n Даже такая ссылка позволяет выполнять методы объекта…
а именно методы, объявленные в классе Object, поскольку они есть у абсолютно любого объекта
Вопрос 43 Интерфейсы. Расширение и реализация. Применение. Сравнение с абстрактными классами. 49-54 Лекция Исключительные ситуации и их обработка
Дата: 2019-07-30, просмотров: 343.