Upload
unguryan-vitaliy
View
56
Download
0
Embed Size (px)
Citation preview
Наследование
Виталий Унгурян [email protected]
Наследование
Наследование (inheritance) — это отношение между
классами, при котором класс приобретает структуру и
поведение другого класса.
Наследование
Наследование – это отношение между классами, при котором характеристики одного класса
(суперкласса) передаются другому классу (подклассу) без
их повторного описания, называется наследованием.
Наследование
От одного класса может быть порождено
произвольное количество новых классов.
Наследование
class Animal {}
class Cat extends Animal {}Animal - Суперкласс (родитель) Cat - Подкласс (потомок Animal)
Плюсы от наследования
Повторное использование написанного кода.
Построение четкой иерархии классов для модели данных
программы.
Иерархия
Наследование вводит иерархию "общее/частное", в которой подкласс наследует от одного или нескольких более общих суперклассов.
Виртуальный метод
Виртуальный метод (виртуальная функция) — это метод класса,
который может быть переопределен в классах-
наследниках так, что конкретная реализация метода для вызова будет определяться во время
исполнения.
Сокрытие методов класса при наследовании.
Если подкласс определяет метод класса (static метод) с такой же сигнатурой как и метод в суперклассе, то метод в подклассе скрывает метод суперкласса.Если в суперклассе метод был static, а в подклассе, его сделать не static получим ошибку компиляции.
Сокрытие переменной экземпляра
Когда имя локальной переменной совпадает с
именем переменной экземпляра, локальная переменная скрывает
переменную экземпляра.
Ключевое слово this
this - это не явная ссылка в не статическом методе класса на
объект для которого был вызван данный метод.
Ключевое слово super
super - это ссылка в не статическом методе класса на
методы и свойства суперкласса.
Ключевое слово super
Ключевое слово super можно использовать для: •Указания на конструктор суперкласса;•Метод суперкласса;•Поле суперкласса
Ключевое слово super
super - позволяет вызвать методы суперкласса (родителя), если метод переопределен в наследнике.public class Cat extends Animal {@Override public String getType() { return super.getType(); }}
Ключевое слово super
Вызов метода super() всегда должен быть первым оператором, выполняемым внутри конструктора подкласса.У суперкласса могут быть несколько перегруженных версий конструкторов, поэтому можно вызывать метод super() с разными параметрами.
Преобразования типов (классов) при наследовании
Механизм наследования классов предусматривает
возможности преобразования типов между суперклассом и
подклассом.
Преобразования типов (классов) при наследовании
Преобразование типов в каком-то смысле является формальным.
Сам объект при таком преобразовании не изменяется,
преобразование относится только к типу ссылки на объект.
Формальное преобразование типа (классов) при наследовании
Формальное преобразование позволяет преобразовать ссылку на субкласса к типу
ссылки суперкласса.Animal a = new Cat();
Происходит сужение типа.
Преобразования типов (классов) при наследовании
Понижающее преобразование (downcasting) — это
преобразование от суперкласса к подклассу.
Cat b = (Cat) a;
Происходит расширение типа
Ограничения понижающего преобразования (downcasting)
Может задаваться только явно при помощи операции преобразования типов,
Объект, подвергаемый преобразованию, реально должен быть экземпляром того класса, к которому он преобразуется. Если это не так, то возникает исключение ClassCastException в процессе выполнения программы.
instanceof
instanceof - это операция которая определяет
принадлежит ли тип объекта к определенному типу. Результат операции true, если тип класса
совпадает или явяляется суперклассом.
instanceof
instanceof часто применяется при понижающем (downcasting) преобразовании. Эта операция проверяет, имеет ли её левый
операнд класс, заданный правым операндом.
Пример использования instanceof
if ( a instanceof B ) { b1 = (B) a;}