Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции Java / 04. Исключительные ситуации и их обработка. Наследование и его особенности.pptx

.pdf
Скачиваний:
137
Добавлен:
16.03.2015
Размер:
217.8 Кб
Скачать

И его результат

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

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

31

Совпадение имен методов в родительском и дочернем классах

n Сигнатуры различны

Перегрузка – добавляется метод с другими параметрами

n Сигнатуры совпадают

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

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

32

Переопределение методов

nПри обращении извне объекта производного класса к его методу всегда вызывается новая версия метода

nДоступ к методу базового класса изнутри объекта дочернего класса может быть получен с помощью ключевого слова super

nУровень доступа при переопределении не может сужаться

nМетоды private не переопределяются

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

33

Переопределение методов

nВ предложении throws дочернего метода не может быть типов исключений, не совместимых с типами в предложении throws родительского метода

nПереопределенный метод может быть снабжен модификатором abstract

nПризнаки synchronized, native и strictfp могут изменяться произвольно

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

34

Сокрытие полей

nПоля не переопределяются, но скрываются

nПоле базового класса при сокрытии продолжает существовать, но недоступно непосредственно по имени

nДоступ можно получить с помощью ключевого слова super либо через ссылочную переменную родительского типа

nИмеет право на существование следующая конструкция:

(VeryBaseClass) this

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

35

Служебное слово super

nДействует как ссылка на текущий экземпляр по контракту базового класса

nМожет быть использовано в теле любого нестатического члена класса

nФормы использования

Вызов конструктора родительского класса super(...)

Вызов метода родительского класса super.method(...)

Обращение к полю родительского класса super.field

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

36

Сокрытие статических членов

nСтатические члены не могут быть переопределены, они скрываются

nОбычно для доступа используется имя класса, поэтому проблем не возникает

nЕсли используется ссылка, то учитывается объявленный тип ссылки, а не фактический тип объекта

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

37

Давешний результат

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

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

38

Замечание

Важно понимать, что:

nПереопределение методов – фундаментальный механизм, позволяющий изменить реализацию класса без изменения типа

nСокрытие полей – последствие отсутствия

ограничений на имена полей

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

39

Завершенные методы и классы

nЗавершенный метод не допускает переопределения

final public int getValue() { ... }

nЗавершенный класс не допускает расширения

final class MyClass {

...

}

Самарский государственный аэрокосмический университет имени академика С.П. Королёва

40