
Лекции Java / 04. Исключительные ситуации и их обработка. Наследование и его особенности.pptx
.pdf
И его результат
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 |