23
Наследование Виталий Унгурян [email protected]

Наследование

Embed Size (px)

Citation preview

Page 1: Наследование

Наследование

Виталий Унгурян [email protected]

Page 2: Наследование

Наследование

Наследование (inheritance) — это отношение между

классами, при котором класс приобретает структуру и

поведение другого класса.

Page 3: Наследование

Наследование

Наследование – это отношение между классами, при котором характеристики одного класса

(суперкласса) передаются другому классу (подклассу) без

их повторного описания, называется наследованием.

Page 4: Наследование

Наследование

От одного класса может быть порождено

произвольное количество новых классов.

Page 5: Наследование

Наследование

class Animal {}

class Cat extends Animal {}Animal - Суперкласс (родитель) Cat - Подкласс (потомок Animal)

Page 6: Наследование

Плюсы от наследования

Повторное использование написанного кода.

Построение четкой иерархии классов для модели данных

программы.

Page 7: Наследование

Иерархия

Наследование вводит иерархию "общее/частное", в которой подкласс наследует от одного или нескольких более общих суперклассов.

Page 8: Наследование

Виртуальный метод

Виртуальный метод (виртуальная функция) — это метод класса,

который может быть переопределен в классах-

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

исполнения.

Page 9: Наследование

Сокрытие методов класса при наследовании.

Если подкласс определяет метод класса (static метод) с такой же сигнатурой как и метод в суперклассе, то метод в подклассе скрывает метод суперкласса.Если в суперклассе метод был static, а в подклассе, его сделать не static получим ошибку компиляции.

Page 10: Наследование

Сокрытие переменной экземпляра

Когда имя локальной переменной совпадает с

именем переменной экземпляра, локальная переменная скрывает

переменную экземпляра.

Page 11: Наследование

Ключевое слово this

this - это не явная ссылка в не статическом методе класса на

объект для которого был вызван данный метод.

Page 12: Наследование

Ключевое слово super

super - это ссылка в не статическом методе класса на

методы и свойства суперкласса.

Page 13: Наследование

Ключевое слово super

Ключевое слово super можно использовать для: •Указания на конструктор суперкласса;•Метод суперкласса;•Поле суперкласса

Page 14: Наследование

Ключевое слово super

super - позволяет вызвать методы суперкласса (родителя), если метод переопределен в наследнике.public class Cat extends Animal {@Override public String getType() { return super.getType(); }}

Page 15: Наследование

Ключевое слово super

Вызов метода super() всегда должен быть первым оператором, выполняемым внутри конструктора подкласса.У суперкласса могут быть несколько перегруженных версий конструкторов, поэтому можно вызывать метод super() с разными параметрами.

Page 16: Наследование

Преобразования типов (классов) при наследовании

Механизм наследования классов предусматривает

возможности преобразования типов между суперклассом и

подклассом.

Page 17: Наследование

Преобразования типов (классов) при наследовании

Преобразование типов в каком-то смысле является формальным.

Сам объект при таком преобразовании не изменяется,

преобразование относится только к типу ссылки на объект.

Page 18: Наследование

Формальное преобразование типа (классов) при наследовании

Формальное преобразование позволяет преобразовать ссылку на субкласса к типу

ссылки суперкласса.Animal a = new Cat();

Происходит сужение типа.

Page 19: Наследование

Преобразования типов (классов) при наследовании

Понижающее преобразование (downcasting) — это

преобразование от суперкласса к подклассу.

Cat b = (Cat) a;

Происходит расширение типа

Page 20: Наследование

Ограничения понижающего преобразования (downcasting)

Может задаваться только явно при помощи операции преобразования типов,

Объект, подвергаемый преобразованию, реально должен быть экземпляром того класса, к которому он преобразуется. Если это не так, то возникает исключение ClassCastException в процессе выполнения программы.

Page 21: Наследование

instanceof 

instanceof - это операция которая определяет

принадлежит ли тип объекта к определенному типу. Результат операции true, если тип класса

совпадает или явяляется суперклассом.

Page 22: Наследование

instanceof 

instanceof часто применяется при понижающем (downcasting) преобразовании. Эта операция проверяет, имеет ли её левый

операнд класс, заданный правым операндом.

Page 23: Наследование

Пример использования instanceof 

if ( a instanceof B ) { b1 = (B) a;}