- •Наследование
- •Цели занятия
- •Понятие наследования
- •Понятие наследования
- •Понятие наследования
- •Расширенный класс. Конструкторы
- •Расширенный класс. Конструкторы
- •Расширенный класс. Конструкторы
- •Порядок выполнения
- •Порядок выполнения
- •Порядок выполнения
- •Порядок выполнения
- •Порядок выполнения
- •Наследование и переопределение
- •Наследование и переопределение
- •Наследование и переопределение
- •Наследование и переопределение
- •Сокрытие полей. Доступ к
- •Сокрытие полей. Доступ к
- •Сокрытие полей. Доступ к
- •Возможность доступа и
- •Сокрытие статических членов
- •Служебное слово super
- •Служебное слово super
- •Служебное слово super
- •Совместимость
- •Совместимость
- •Совместимость
- •Явное преобразование типов
- •Явное преобразование типов
- •Проверка типа
- •Проверка типа
- •Методы и классы final
- •Методы и классы final
- •Методы и классы final
- •Методы и классы final
- •Методы и классы final
- •Методы и классы abstract
- •Методы и классы abstract
- •Методы и классы abstract
- •Класс Object
- •Методы класса Object
- •Методы класса Object
- •Методы класса Object
- •Методы класса Object
- •hashCode() и equals()
- •Клонирование объектов
- •Клонирование объектов
- •Клонирование объектов
- •Литература
Наследование
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Цели занятия
2 Изучить:
•Понятие наследования
•Расширенный класс. Конструкторы расширенных классов
•Порядок выполнения конструкторов
•Наследование и переопределение членов
•Сокрытие полей. Доступ к унаследованным членам
•Возможность доступа и переопределение
•Сокрытие статических членов
•Совместимость и преобразование типов
•Методы и классы final
•Методы и классы abstract
•Класс Object и его методы
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие наследования
3• Одно из основных преимуществ ООП состоит в возможности наследования или расширения функционального потенциала базового (родительского) класса при построении на его основе производного (дочернего) класса
•Объект нового класса допускается применять в любом контексте, где предусмотрено использование экземпляров исходного класса
•Последняя возможность носит название полиморфизма и означает, что определённый класс способен восприниматься либо сам по себе, либо в качестве любого из исходных классов, которые он наследует
•Набор методов и полей класса, открытых для свободного доступа извне, в совокупности с описанием их назначения называют контрактом класса
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие наследования
4• Существуют две формы практического воплощения концепции наследования:
наследование контракта или типа, в результате чего производный класс получает тип базового и поэтому может быть использован полиморфным образом во всех случаях, где допустимо применение базового класса
наследование способов реализации –
производный класс приобретает функциональные характеристики базового в виде набора доступных полей и методов
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Понятие наследования
5• Очень часто инструменты наследования используются для обеспечения возможности
специализации, когда производный класс становится специализированной версией базового класса
•В процессе наследования в новом классе может быть предусмотрено, например, изменение способа реализации какого-то метода с целью достижения большей эффективности
•При решении задачи расширения класса обе названные выше формы наследования всегда рассматриваются совместно
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Расширенный класс. Конструкторы
расширенных классов
6• Класс может расширить только один класс
class MyClass1 {
}
class MyClass2 extends MyClass1{
}
•Объект расширенного (производного) класса содержит поля, унаследованные от базового класса, и собственные переменные состояния
•Чтобы создать объект расширенного класса, надлежит корректно проинициализировать оба набора переменных
•Конструктор производного класса способен обращаться к полям базового, но только базовый класс «осведомлён» о том, как их следует инициализировать, чтобы гарантировать безупречное выполнение контракта
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Расширенный класс. Конструкторы
расширенных классов
7• Конструкторы расширенного класса обязаны передавать полномочия по инициализации унаследованных полей, явно или косвенно
обращаясь к услугам конструкторов базового класса
•Конструктор расширенного класса может напрямую обращаться к конструкторам базового класса посредством ещё одного способа явного вызова конструкторов, предусматривающего применение служебного слова super
•Конструкторы расширенных классов могут вызывать друг друга по ключевому слову this
•Конструкторы не относятся к категории методов и не наследуются
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Расширенный класс. Конструкторы
расширенных классов
8• Если в первой строке тела конструктора производного класса не вызывается ни другой конструктор того же класса, ни конструктор базового класса, компилятор обеспечивает
автоматическое обращение к «базовому» конструктору без аргументов – такой вызов осуществляется в первую очередь, прежде всех других исполняемых выражений тела конструктора
•Если же в составе базового класса отсутствует конструктор без параметров, в самом начале тела конструктора производного класса обязана явно присутствовать инструкция вызова какого-либо другого конструктора
•Иногда довольно полезной оказывается ситуация, когда конструкторы расширенного класса обеспечивают передачу аргументов в конструкторы базового класса
•Достаточно общим можно назвать и вариант расширенного класса, в котором нет конструкторов с теми же сигнатурами, что и в базовом
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Порядок выполнения
конструкторов
9• В процессе создания объекта расширенного класса виртуальная машина выделяет память для хранения всех его полей, включая и те, которые унаследованы от базового класса, и последние получают исходные значения по умолчанию, отвечающие их типам
•Далее процесс можно разделить на следующие стадии:
вызов конструктора базового класса
присваивание исходных значений полям объекта посредством выполнения соответствующих выражений и блоков инициализации
выполнение инструкций, предусмотренных в теле конструктора
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Порядок выполнения
конструкторов
10• В первую очередь выполняется явное или косвенное обращение к конструктору базового класса
•Если осуществляется явный вызов конструктора того же производного класса с помощью ссылки this(), подобная цепочка вызовов конструкторов этого класса выполняется до тех пор, пока не будет найдена инструкция явного или косвенного обращения к конструктору базового класса, после чего таковой и вызывается
•Конструктор базового класса выполняется в соответствии с той же последовательностью стадий – процесс продолжается рекурсивно, завершаясь по достижении конструктора класса Object, поскольку далее не существует конструкторов классов более высокого уровня иерархии
•В выражениях, выполняемых в процессе вызова конструктора базового класса, не допускается присутствие ссылок на любые члены текущего объекта
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |