Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_5.1.ppt
Скачиваний:
31
Добавлен:
16.03.2015
Размер:
988.67 Кб
Скачать

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

Все права защищены. 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

Соседние файлы в папке Haulmont-презентации Java