Разделы презентаций


Лекция 2 ООП в Java

Содержание

ПланПроцедурное и объектно-ориентированное программированиеПринципы ООПКлассы и объекты в JavaКонструктор в JavaКлючевое слово this в JavaПерегрузкаПередача объектов в методыJava varargsРекурсия JavaСборщик мусора и метод finalize в JavaНаследование в JavaКлючевое слово super в

Слайды и текст этой презентации

Слайд 1Лекция 2 ООП в Java

Лекция 2 ООП в Java

Слайд 2План
Процедурное и объектно-ориентированное программирование
Принципы ООП
Классы и объекты в Java
Конструктор в

Java
Ключевое слово this в Java
Перегрузка
Передача объектов в методы
Java varargs
Рекурсия Java
Сборщик

мусора и метод finalize в Java
Наследование в Java
Ключевое слово super в Java
Модификаторы доступа Java








ПланПроцедурное и объектно-ориентированное программированиеПринципы ООПКлассы и объекты в JavaКонструктор в JavaКлючевое слово this в JavaПерегрузкаПередача объектов в

Слайд 3Процедурное и объектно-ориентированное программирование
Выделяют две основные методики программирования: процедурное и

объектно-ориентированное программирование.
Процедурное программирование - это тип программирования, в котором инструкции

для решения задачи выполняются одна за другой, сверху вниз, иногда возникают изменения в их последовательности. Когда программа становится более сложной на помощь приходят методы. Но современные программы настолько сложны, что даже разделение на методы не делают программу проще. И здесь на помощь приходит объектно-ориентированное программирование. Все программы, которые мы рассматривали до сих пор, написаны в процедурном стиле. Даже несмотря на то, что весь код прописан в классе. 
Процедурное и объектно-ориентированное программированиеВыделяют две основные методики программирования: процедурное и объектно-ориентированное программирование.Процедурное программирование - это тип программирования,

Слайд 4Процедурное и объектно-ориентированное программирование
Объектно-ориентированное программирование (ООП) - методика программирования, в

которой основными концепциями являются понятия объектов и классов. Прежде чем

начать писать инструкции для решения задачи, в задаче выделяются объекты и описываются с помощью классов. В классе прописывается поведение объектов с помощью методов и характеристики или свойства объекта с помощью переменных класса. Одной из ключевых особенностей языка Java является ООП.
Процедурное и объектно-ориентированное программированиеОбъектно-ориентированное программирование (ООП) - методика программирования, в которой основными концепциями являются понятия объектов и

Слайд 5Процедурное и объектно-ориентированное программирование
Процедурное программирование можно сравнить с постройкой маленького

домика - нет необходимости тратить время и ресурсы на продумывание

архитектуры. ООП же похоже на постройку сложного архитектурного сооружения, где очень важно продумать все детали, и только потом приступать к программированию (постройке). 
Несмотря на явное преимущество ООП, не следует им злоупотреблять. Если вам нужно написать маленькую программку, например, вычисление факториала, процедурное программирование вполне подойдет.
Процедурное и объектно-ориентированное программированиеПроцедурное программирование можно сравнить с постройкой маленького домика - нет необходимости тратить время и

Слайд 6Принципы ООП
Инкапсуляция — это свойство системы, позволяющее объединить данные и методы

в классе, и скрыть детали реализации от пользователя.

Принципы ООПИнкапсуляция — это свойство системы, позволяющее объединить данные и методы в классе, и скрыть детали реализации от

Слайд 7Принципы ООП
Наследование — это свойство системы, позволяющее описать новый класс

на основе уже существующего с частично или полностью заимствующейся функциональностью.

В Java класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.
Принципы ООПНаследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или

Слайд 8Принципы ООП
Полиморфизм — буквально означает много форм. Это свойство системы

использовать объекты с одинаковым интерфейсом без информации о типе и

внутренней структуре объекта. “Один интерфейс, множество методов”. Реализации полиморфизма в языке Java - это перегрузка и переопределение методов, интерфейсы.
Принципы ООППолиморфизм — буквально означает много форм. Это свойство системы использовать объекты с одинаковым интерфейсом без информации

Слайд 9Принципы ООП
Абстракция данных — это способ выделить набор значимых характеристик объекта,

исключая из рассмотрения не значимые. Соответственно, абстракция — это набор

всех таких характеристик.
Принципы ООПАбстракция данных — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения не значимые. Соответственно, абстракция

Слайд 10Классы и объекты в Java
Класс в Java - это шаблон

для создания объекта, а объект - это экземпляр класса. Класс

определяет структуру и поведение, которые будут совместно использоваться набором объектов. Класс содержит переменные и методы, которые называются элементами класса, членами класса. Он составляет основу инкапсуляции в Java. Каждый объект данного класса содержит структуру и поведение, которые определены классом. Иногда объекты называют экземплярами класса.
Методы используются для описания того, что объект класса умеет делать или что можно с ним сделать. Переменные - для описания свойств или характеристик объекта.
Классы и объекты в JavaКласс в Java - это шаблон для создания объекта, а объект - это

Слайд 11Классы и объекты в Java

Классы и объекты в Java

Слайд 12Классы и объекты в Java
После ключевого слова class пишется имя

класса. В теле класса объявляются переменные и методы класса. Их

может быть сколько угодно.
Опишем класс для объекта Box (коробка). У коробки есть три главные характеристики: ширина, высота и глубина, описанные с помощью переменных:
Классы и объекты в JavaПосле ключевого слова class пишется имя класса. В теле класса объявляются переменные и

Слайд 13Классы и объекты в Java
Создание объекта в Java
Объявление класса создает

только шаблон, но не конкретный объект. Чтобы создать объект класса

Вох в Java, нужно воспользоваться оператором наподобие следующего:


При создании экземпляра класса, создается объект, который содержит собственную копию каждой переменной экземпляра, определенной в данном классе.
Классы и объекты в JavaСоздание объекта в JavaОбъявление класса создает только шаблон, но не конкретный объект. Чтобы

Слайд 14Классы и объекты в Java
Создание объектов класса представляет собой двух

этапный процесс:
Объявление переменной типа класса. Эта переменная не определяет объект.

Она является лишь переменной, которая может ссылаться на объект:


Создание объекта. С помощью оператора new динамически (то есть во время выполнения) резервируется память для объекта и возвращается ссылка на него:
Классы и объекты в JavaСоздание объектов класса представляет собой двух этапный процесс:Объявление переменной типа класса. Эта переменная

Слайд 15Классы и объекты в Java

Классы и объекты в Java

Слайд 16Классы и объекты в Java
После объявления объекта класса Box, всем

переменным класса присваивается значение по умолчанию для заданного типа. Для

того, чтобы обратиться к переменной класса и изменить ее или получить значение, используется имя переменной объекта.
Классы и объекты в JavaПосле объявления объекта класса Box, всем переменным класса присваивается значение по умолчанию для

Слайд 17Классы и объекты в Java
В следующем примере объявляется два объекта

класса Box и каждому устанавливаются свои значения. Изменения в переменных

экземпляра одного объекта не влияют на переменные экземпляра другого.
Классы и объекты в JavaВ следующем примере объявляется два объекта класса Box и каждому устанавливаются свои значения.

Слайд 18Классы и объекты в Java
Возможна ситуация, когда две переменные указывают

на один и тот же объект в памяти.

Классы и объекты в JavaВозможна ситуация, когда две переменные указывают на один и тот же объект в

Слайд 19Классы и объекты в Java
Рассмотрим как это происходит на следующем

примере.
При объявлении переменной b1 создается новый объект в памяти. При

объявлении переменной b2, вместо создания нового объекта, переменной присваивается ссылка на объект b1. Далее объекту, на который указывает переменная b1, присваиваются значения 10, 20, 30. А ширине объекта, на который указывает переменная b2, присваивается значение 3.
Но обе переменные указывают на один и тот же объект, поэтому результат выполнения этой программы будет:
Классы и объекты в JavaРассмотрим как это происходит на следующем примере.При объявлении переменной b1 создается новый объект

Слайд 20Добавляем методы в класс
Кроме переменных класс может содержать методы. В

следующем примере в класс Box добавляется два метода: getVolume() -

для вычисления объема коробки и setDim() - для установки размера коробки. Обратите внимание, что теперь мы объявляем методы нестатические (без ключевого слова static). В обоих методах мы имеем доступ к переменным класса.
Добавляем методы в классКроме переменных класс может содержать методы. В следующем примере в класс Box добавляется два

Слайд 21Классы и объекты в Java
В следующей программе создаются создаются два

объекта класса Box и вместо инициализации каждой переменной класса, как

мы делали ранее, вызывается метод setDim(), куда передаются необходимые значения для ширины, высоты и глубины. Таким образом программа становится более компактной. Нестатический метод класса всегда вызывается для какого-то объекта. Аналогично, для подсчета объема коробки вызываем метод getVolume() для каждого объекта отдельно:
Классы и объекты в JavaВ следующей программе создаются создаются два объекта класса Box и вместо инициализации каждой

Слайд 22Конструктор в Java
В языке Java существует такая конструкция как конструктор,

который инициализирует объект непосредственно во время его создания. При создании

объекта, то что пишется после ключевого слова new, это и есть конструктор:
Конструктор в JavaВ языке Java существует такая конструкция как конструктор, который инициализирует объект непосредственно во время его

Слайд 23Конструктор в Java
Добавим конструктор в класс Box сразу после переменных.

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

а синтаксис аналогичен синтаксису метода. Конструкторы не имеют возвращаемого типа. Это объясняется тем, что неявно заданным возвращаемым типом конструктора класса является тип самого класса. В конструкторе мы устанавливаем значение 10 переменным класса.
Конструктор в JavaДобавим конструктор в класс Box сразу после переменных. Имя конструктора совпадает с именем класса, в

Слайд 24Конструктор в Java
Первые примеры класса Box не определяли конструктора класса,

но все же мы имели возможность создавать объекты. Как так

получалось? Дело в том, что если конструктор класса не определен явно, то в Java для класса создается конструктор по умолчанию. Конструктор по умолчанию инициализирует все переменные экземпляра устанавливаемыми по умолчанию значениями. Но как только в классе будет определен собственный конструктор, конструктор по умолчанию больше не используется. Можно сказать, что класс с конструктором по умолчанию выглядит так:
Конструктор в JavaПервые примеры класса Box не определяли конструктора класса, но все же мы имели возможность создавать

Слайд 25Конструктор в Java
Посмотрим как изменилось создание объектов. Теперь в конструктор

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

Этот конструктор можно использовать вместо метода setDim() для установки нужных значений уже при создании объекта, что более удобно. Обратите внимание на закомментированую строку - мы не можем создать объект используя конструктор по умолчанию, так как в классе мы определили свой конструктор:
Конструктор в JavaПосмотрим как изменилось создание объектов. Теперь в конструктор необходимо передать три значения для установки ширины,

Слайд 26Конструктор в Java
Для того, чтобы закомментированая строка работала, просто добавим

в класс Box еще один конструктор:





Код конструктора должен заниматься только

инициализацией объекта. Следует избегать вызовов из конструктора других методов, за исключением final. Метод может быть переопределен в подклассе и исказить процесс инициализации объекта.
Конструктор в JavaДля того, чтобы закомментированая строка работала, просто добавим в класс Box еще один конструктор:Код конструктора

Слайд 27Ключевое слово this в Java
Иногда требуется, чтобы метод ссылался на

вызвавший его объект. Ключевое слово this в Java используется в

теле любого метода для ссылки на текущий объект.
Рассмотрим конструктор, в котором параметры имеют те же имена, что и переменные класса. В этом случае параметры перекрывают область видимости переменных класса и мы не можем напрямую обратится к переменным класса. Чтобы это сделать используется ключевое слово this:
Ключевое слово this в JavaИногда требуется, чтобы метод ссылался на вызвавший его объект. Ключевое слово this в

Слайд 28Ключевое слово this в Java
В этом примере использование ключевого слова

this не является необходимым - можно обойтись и без него:

Ключевое слово this в JavaВ этом примере использование ключевого слова this не является необходимым - можно обойтись

Слайд 29Ключевое слово this в Java
Второй вариант использования ключевого слова this()

- с его помощью можно вызвать один конструктор из другого.

Вызов this() может находиться только в первой строчке конструктора
Ключевое слово this в JavaВторой вариант использования ключевого слова this() - с его помощью можно вызвать один

Слайд 30Ключевое слово this в Java
Второй вариант использования ключевого слова this()

- с его помощью можно вызвать один конструктор из другого.

Вызов this() может находиться только в первой строчке конструктора
Ключевое слово this в JavaВторой вариант использования ключевого слова this() - с его помощью можно вызвать один

Слайд 31Перегрузка
В Java разрешается в одном и том же классе определять

два или более метода с одним именем, если только объявления

их параметров отличаются. Это называется перегрузкой методов. Например, в следующем примере один класс объявляет два метода с одним именем test, но разными параметрами.
ПерегрузкаВ Java разрешается в одном и том же классе определять два или более метода с одним именем,

Слайд 32Перегрузка
Как же JVM различает какой метод необходимо вызвать? Для этого

в Java используется тип и/или количество аргументов метода.
Перегрузка методов является

одним из способов поддержки полиморфизма в Java. 
Возвращаемые типы перегружаемых методов могут отличаться, но самого возвращаемого типа недостаточно для того, чтобы отличать два разных варианта метода
ПерегрузкаКак же JVM различает какой метод необходимо вызвать? Для этого в Java используется тип и/или количество аргументов

Слайд 33Перегрузка
В следующем примере методы void test() и double test(double a)

возвращают значения разного типа. Это допустимо, но при условии, что

параметры методов будут отличаться. Закомментированный метод int test() отличается от void test() только типом - это недопустимо для перегруженного метода. Если его раскомментировать, будет ошибка компиляции.
ПерегрузкаВ следующем примере методы void test() и double test(double a) возвращают значения разного типа. Это допустимо, но

Слайд 34Перегрузка
Конструкторы похожи на методы, поэтому они тоже могут быть перегружены

- вы можете объявлять в одном классе несколько конструкторов, которые

различаются количеством и типом переменных. В следующем примере добавлены три конструктора в класс Box6. Конечно же, при создании объекта вызывается только один из них - тот, который кажется вам наиболее подходящим.
ПерегрузкаКонструкторы похожи на методы, поэтому они тоже могут быть перегружены - вы можете объявлять в одном классе

Слайд 35Перегрузка

Перегрузка

Слайд 36Передача объектов в методы
Объекты допускается передавать методам в качестве параметров

точно так же, как и примитивные значения. При этом объекты

передаются по ссылке на них. Метод может изменять полученные значения. Самый важный вопрос здесь - а будут ли изменяться эти значения в вызвавшем методе? Если в метод передан объект - то будут, если же это примитивное значение - то нет. Почему так? Давайте рассмотрим на следующем примере.
Передача объектов в методыОбъекты допускается передавать методам в качестве параметров точно так же, как и примитивные значения.

Слайд 37Передача объектов в методы
Локальная объектная переменная box создается в стековой

области памяти метода main(), но сам объект создается в куче.

При вызове метода changeObject() передается не сам объект, а ссылка на него. Поэтому при изменении переменной о в методе changeObject(), меняется объект находящийся куче. И эти изменения, естественно, видны в вызвавшем методе main()
Передача объектов в методыЛокальная объектная переменная box создается в стековой области памяти метода main(), но сам объект

Слайд 39Передача объектов в методы
Результат работы:

Передача объектов в методыРезультат работы:

Слайд 40Java varargs
В языке Java существуют методы, которые могут принимать переменное

количество аргументов. Они называются методами с аргументами переменной длины (var-args).
Для

указания аргументов переменной длины служат три точки ( . . . ). Например:


Наряду с параметром переменной длины у метода могут быть и "обычные" параметры. Но параметр переменной длины должен быть последним среди всех параметров, объявляемых в методе. Например:


Метод может содержать только один параметр с переменным количеством аргументов.
Java varargsВ языке Java существуют методы, которые могут принимать переменное количество аргументов. Они называются методами с аргументами

Слайд 41Java varargs
В следующем примере показан метод test(), объявленный с переменным

количеством аргументов типа int. Внутри метода мы обращаемся к этим

переменным как к массиву. При вызове этого метода можно передать любое, даже нулевое количество аргументов, а также массив:
Java varargsВ следующем примере показан метод test(), объявленный с переменным количеством аргументов типа int. Внутри метода мы

Слайд 42Java varargs
Перегрузка методов с аргументами переменной длины
При вызове метода без

аргументов, подходят два метода - test(double... array) и test(int... array).

В этом случае будет вызван метод с меньшим диапазоном значений - test(int... array).
При вызове метода test() с одним значением типа int - test(3), будет выбран метод test(int a).
Java varargsПерегрузка методов с аргументами переменной длиныПри вызове метода без аргументов, подходят два метода - test(double... array)

Слайд 43Java varargs
При перегрузке метода, принимающего аргументы переменной длины, могут происходить

непредвиденные ошибки. Они связаны с неоднозначностью, которая может возникать при

вызове перегружаемого метода с аргументами переменной длины.
В следующем примере метод test перегружен - один вариант принимает значения var-ags типа boolean, а второй тоже var-ags, но типа int. При вызове метода test() без аргументов, возникает ошибка неоднозначности - JVM не может выбрать необходимый метод
Java varargsПри перегрузке метода, принимающего аргументы переменной длины, могут происходить непредвиденные ошибки. Они связаны с неоднозначностью, которая

Слайд 44Java varargs
Аргументы переменной длины и неоднозначность

Java varargsАргументы переменной длины и неоднозначность

Слайд 45Рекурсия Java
Рекурсия - это средство, которое позволяет методу вызывать самого

себя. Такой метод называется рекурсивным.
Когда рекурсивный метод вызывает самого себя,

новым локальным переменным и параметрам выделяется место в стеке и код метода выполняется с этими новыми исходными значениями. При каждом возврате из вызова рекурсивного метода прежние локальные переменные и параметры удаляются из стека, а выполнение продолжается с точки вызова в самом методе.
Рекурсию можно сравнить с подзорной трубой, которую раскладывают до нужного состояния, а потом складывают обратно.
Рекурсия JavaРекурсия - это средство, которое позволяет методу вызывать самого себя. Такой метод называется рекурсивным.Когда рекурсивный метод

Слайд 46Рекурсия Java
В следующем примере показана реализация подсчета факториала с помощью

рекурсии на языке Java. Метод factorial() рекурсивно вызывает самого себя.

В рекурсивном методе обязательно задавать точку возврата - условие при котором прекращается рекурсивный вызов метода. Если этого не сделать программа зациклится. В методе factorial() - это проверка на 1.
Рекурсия JavaВ следующем примере показана реализация подсчета факториала с помощью рекурсии на языке Java. Метод factorial() рекурсивно

Слайд 47Сборщик мусора и метод finalize в Java
Каждый раз при создании

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

она может окончится. В некоторых языках программирования разработчики должны сами контролировать освобождение памяти. В Java же освобождение памяти выполняется автоматически. Используемая для выполнения этой задачи технология называется сборщиком мусора. Есть возможность запросить сборку мусора самим, для чего используется метод System.gc(). НО - JVM сама решит выполнять ли ваш запрос!
Сборка мусора проходит следующим образом: при отсутствии каких либо ссылок на объект программа заключает, что этот объект больше не нужен, и занимаемую объектом память можно освободить. 
Сборщик мусора и метод finalize в JavaКаждый раз при создании объекта под него выделяется память. Память не

Слайд 48Сборщик мусора и метод finalize в Java
Например, в методе main()

класса Cup создается объект типа Cup, на который указывает переменная

cup. После выполнения строчки cup = null, объект все еще существует в памяти, но на него не указывает не одна ссылка. Этот объект является кандидатом для удаление при сборке мусора. Кроме того объект класса Cup содержит ссылочную переменную, указывающую на объект типа Spoon. Этот объект тоже будет удален сборщиком мусора.
Сборщик мусора и метод finalize в JavaНапример, в методе main() класса Cup создается объект типа Cup, на

Слайд 49Сборщик мусора и метод finalize в Java
Если объект взаимодействует с

какими-то ресурсами, например открывает поток вывода и читает из него,

то такой поток необходимо закрыть перед удалением объекта из памяти. Для этого в языке Java достаточно переопределить метод finalize(), который вызывается в исполняющей среде Java непосредственно перед удалением объекта данного класса. В теле метода finalize() нужно указать те действия, которые должны быть выполнены перед уничтожением объекта. Метод finalize() вызывается лишь непосредственно перед сборкой "мусора”.
Метод finalize() не вызывается при выходе объекта из области действия. Заранее неизвестно, когда будет (и будет ли вообще) выполняться метод finalize(). И самое главное - начиная с Java 9 этот метод не рекомендуется к использованию. Но все таки приведем пример его использования.
Сборщик мусора и метод finalize в JavaЕсли объект взаимодействует с какими-то ресурсами, например открывает поток вывода и

Слайд 50Сборщик мусора и метод finalize в Java
Добавим finalize() в классы

Spoon и Cup, а также запросим вызвать сборщика мусора вызвав

метод System.gc(), для того чтобы протестировать вызов finalize():
Сборщик мусора и метод finalize в JavaДобавим finalize() в классы Spoon и Cup, а также запросим вызвать

Слайд 51Наследование в Java
У нас есть следующий класс, описывающий коробку

Наследование в JavaУ нас есть следующий класс, описывающий коробку

Слайд 52Наследование в Java
И вдруг заказчик решает добавить цветную коробку -

ColorBox и тяжелую коробку - HeavyBox. Цветная коробка будет отличаться

от обычной только цветом, а тяжелая - весом. Получается, что в класс ColorBox мы должны добавить те же переменные width, height и depth, конструкторы и методы, которые существуют в классе Box. Дублирование кода в программировании не приветствуется, поэтому для таких случаев придуман такой механизм как наследование.
Используя наследование Java, можно создать класс, который определяет характеристики, общие для набора связанных элементов - Box. Затем этот общий класс может наследоваться другими, более специализированными классами ColorBox и HeavyBox, каждый из которых будет добавлять свои особые характеристики.
Наследование в JavaИ вдруг заказчик решает добавить цветную коробку - ColorBox и тяжелую коробку - HeavyBox. Цветная

Слайд 53Наследование в Java
В терминологии Jаvа наследуемый класс называется суперклассом, а

наследующий класс – подклассом. Подкласс наследует все члены, определенные в

суперклассе, добавляя к ним собственные, особые элементы. Набор классов, связанных отношением наследования, называют иерархией, что изображается таким образом.
Наследование в JavaВ терминологии Jаvа наследуемый класс называется суперклассом, а наследующий класс – подклассом. Подкласс наследует все

Слайд 54Наследование в Java
Общая форма объявления класса, который наследуется от суперкласса:




Для

каждого создаваемого подкласса можно указать только один суперкласс. Класс не

может стать суперклассом для самого себя.
Наследование в JavaОбщая форма объявления класса, который наследуется от суперкласса:Для каждого создаваемого подкласса можно указать только один

Слайд 55Наследование в Java
В объявлении класса ColorBox используется ключевое слово extends

для указания того, что ColorBox является наследником Box6. ColorBox содержит

все переменные и методы класса Box6 несмотря на то, что в самом классе ColorBox они не указаны.
Наследование в JavaВ объявлении класса ColorBox используется ключевое слово extends для указания того, что ColorBox является наследником

Слайд 56Наследование в Java
Один класс может содержать несколько наследников - класс

HeavyBox тоже расширяет Box6:

Наследование в JavaОдин класс может содержать несколько наследников - класс HeavyBox тоже расширяет Box6:

Слайд 57Наследование в Java
В следующем классе создаем объекты всех трех типов

и подсчитываем объем для каждой коробки.

Наследование в JavaВ следующем классе создаем объекты всех трех типов и подсчитываем объем для каждой коробки.

Слайд 58Наследование в Java
Несмотря на то, что подкласс включает в себя

все члены своего суперкласса, он не может иметь доступ к

тем членам суперкласса, которые объявлены как private:



Из класса B, который является наследником класса A, невозможно напрямую обратиться к private переменной класса A. Доступ к ним можно получить через геттер методы:
Наследование в JavaНесмотря на то, что подкласс включает в себя все члены своего суперкласса, он не может

Слайд 59Наследование в Java
Ссылочной переменной суперкласса может быть присвоена ссылка на

любой его подкласс.
Например, переменная heavyBox объявлена как Box, но она

указывает на объект типа HeavyBox:



Обратное не верно! Нельзя написать так: HeavyBox heavyBox = new Box(15, 10, 20).
Наследование в JavaСсылочной переменной суперкласса может быть присвоена ссылка на любой его подкласс.Например, переменная heavyBox объявлена как

Слайд 60Наследование в Java
В следующем примере объявлено три переменные типа Box6,

но они указывают на разные объекты.
Для каждого объекта мы можем

узнать его ширину, но при попытке обратиться к переменной color объекта redBox, возникнет ошибка компиляции. В чем причина такого поведения? Переменная color объявлена в классе ColorBox с уровнем доступа по умолчанию, класс DifferentBoxDemo2 находится в том же пакете, то есть переменная color должна быть доступна. Дело в том, что доступные члены класса определяются типом ссылочной переменной, а не типом объекта, на который она ссылается. То есть если переменная объявлена типа Box6, нам доступны только члены объявленные в классе Box6 (weight, height, depth), и неважно на какой объект она ссылается. А вот для переменной blueBox мы можем узнать цвет, так как переменная объявлена как ColorBox.
Наследование в JavaВ следующем примере объявлено три переменные типа Box6, но они указывают на разные объекты.Для каждого

Слайд 61Наследование в Java

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

Слайд 62Наследование в Java
Можно строить иерархии, состоящие из любого количества уровней

наследования. Например, добавим класс Shipment, расширяющий HeavyBox.

Наследование в JavaМожно строить иерархии, состоящие из любого количества уровней наследования. Например, добавим класс Shipment, расширяющий HeavyBox.

Слайд 63Наследование в Java

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

Слайд 64Наследование в Java
Класс Shipment содержит не только переменную cost, объявленную

в самом классе, но и переменные класса HeavyBox и Box6:

Наследование в JavaКласс Shipment содержит не только переменную cost, объявленную в самом классе, но и переменные класса

Слайд 65Наследование в Java
Порядок вызова конструкторов в многоуровневой иерархии
В иерархии классов

конструкторы выполняются в порядке наследования, начиная с суперкласса и кончая

подклассом. Рассмотрим следующую иерархию классов.
Наследование в JavaПорядок вызова конструкторов в многоуровневой иерархииВ иерархии классов конструкторы выполняются в порядке наследования, начиная с

Слайд 66Наследование в Java
При создании объекта класса G, сначала закончит свое

выполнение конструктор класса E, потом F и в конце G.

Наследование в JavaПри создании объекта класса G, сначала закончит свое выполнение конструктор класса E, потом F и

Слайд 67Ключевое слово super в Java
Ключевое слово super в Java используется

когда подклассу требуется сослаться на его непосредственный суперкласс.
У ключевого слова

super имеются две общие формы:
Для вызова конструктора суперкласса:
Для обращения к члену суперкласса, скрываемому членом подкласса

Ключевое слово super в JavaКлючевое слово super в Java используется когда подклассу требуется сослаться на его непосредственный

Слайд 68Ключевое слово super в Java
Если в иерархии классов требуется передать

параметры конструктору суперкласса, то все подклассы должны передавать эти параметры

вверх по иерархии. То есть из конструктора подкласса надо вызвать конструктор суперкласса с помощью super(). Когда метод super() вызывается из подкласса, вызывается конструктор его непосредственного суперкласса. Это справедливо даже для многоуровневой иерархии.
Вызов метода super() должен быть всегда в первом операторе, выполняемом в теле конструктора подкласса.
Ключевое слово super в JavaЕсли в иерархии классов требуется передать параметры конструктору суперкласса, то все подклассы должны

Слайд 69Ключевое слово super в Java
В этом примере из конструктора класса

HeavyBox1 вызываем конструктора класса Box6 c помощью super(), тем самым

передавая необходимые значения.
Ключевое слово super в JavaВ этом примере из конструктора класса HeavyBox1 вызываем конструктора класса Box6 c помощью

Слайд 70Ключевое слово super в Java
Если в конструкторе наследника нет явного

вызова super(), как например во втором конструкторе класса HeavyBox1, JVM

сама его подставляет первой строкой:


Из этого следует, что суперкласс должен иметь конструктор без параметров, иначе возникнет ошибка компиляции.
Ключевое слово super в JavaЕсли в конструкторе наследника нет явного вызова super(), как например во втором конструкторе

Слайд 71Ключевое слово super в Java
С помощью ключевого слова super можно

обратиться к члену суперкласса из класса наследника. Чаще всего это

можно сделать не используя super, но в этом примере рассмотрим случаи, когда без него не обойтись.
В классе С объявлена переменная i типа int. В его наследнике классе D, тоже объявлена переменная i, но типа String. (Сразу же предупредим - на практике не стоит так делать! Пример приводится с целью иллюстрирования применение ключевого слова super с переменными.) Из класса D мы можем напрямую обратиться только к переменной String i, которая перекрывает область видимости переменной int i. Для обращения же к int i, необходимо использовать слово super.
Похожая ситуация и с методами. В обоих классах определен метод print(). Если мы хотим из класса D вызвать метод print() класса С, используем слово super - super.print().
Ключевое слово super в JavaС помощью ключевого слова super можно обратиться к члену суперкласса из класса наследника.

Слайд 72Модификаторы доступа Java
Существует три модификатора доступа: public, private и protected

и четыре уровня доступа:
public (открытый) - когда член

объявляется с модификатором доступа public, он становится доступным из любого другого кода.
private (закрытый) - когда член класса объявляется с модификатором доступа private, он доступен только другим членам этого же класса.
protected (защищенный) - применяется только при наследовании.
уровень доступа, предоставляемый по умолчанию - в отсутствие модификатора доступа по умолчанию член класса считается открытым в своем пакете, но недоступным для кода, находящегося за пределами этого пакета.
Ограничение уровня доступа к членам класса - это еще один механизм реализации принципа инкапсуляции.
Модификаторы доступа JavaСуществует три модификатора доступа: public, private и protected и четыре уровня доступа:  public (открытый)

Слайд 73Модификаторы доступа Java
Рассмотрим отличие уровня доступа по умолчанию, public и

private на следующем примере. В классе Modificators объявлено три переменные

с разным уровнем доступа. Внутри самого класса Modificators можно обратится к любой из этих переменных, как показано в методе toString()
Модификаторы доступа JavaРассмотрим отличие уровня доступа по умолчанию, public и private на следующем примере. В классе Modificators

Слайд 74Модификаторы доступа Java
В классе ModificatorsDemo1, созданном в том же пакете

где и класс Modificators, объявляем объект типа Modificators и обращаемся

к его public переменной и переменной с уровнем доступа по умолчанию. При попытке обратится к private переменной, возникнет ошибка компиляции - она недоступна извне класса Modificators.
Модификаторы доступа JavaВ классе ModificatorsDemo1, созданном в том же пакете где и класс Modificators, объявляем объект типа

Слайд 75Модификаторы доступа Java
Создадим класс похожий на ModificatorsDemo1, но в другом

пакете. В этом классе мы точно также не можем обратится

к private переменной, но теперь и переменная с уровнем доступа по умолчанию тоже недоступна.
Модификаторы доступа JavaСоздадим класс похожий на ModificatorsDemo1, но в другом пакете. В этом классе мы точно также

Слайд 76Модификаторы доступа Java
Создадим класс похожий на ModificatorsDemo1, но в другом

пакете. В этом классе мы точно также не можем обратится

к private переменной, но теперь и переменная с уровнем доступа по умолчанию тоже недоступна.
Модификаторы доступа JavaСоздадим класс похожий на ModificatorsDemo1, но в другом пакете. В этом классе мы точно также

Слайд 77Модификаторы доступа Java
Уровень доступа protected используется при наследовании. Он очень

похож на уровень доступа по умолчанию, который раскрывает область видимости

только для классов определенных в том же пакете. Protected модификатор раскрывает область видимости для классов определенных в том же пакете или для классов-наследников.
Модификаторы доступа JavaУровень доступа protected используется при наследовании. Он очень похож на уровень доступа по умолчанию, который

Слайд 78Модификаторы доступа Java
Рассмотрим разницу между уровнями доступа на следующем примере.
Объявим

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

Модификаторы доступа JavaРассмотрим разницу между уровнями доступа на следующем примере.Объявим в классе Parent три метода с разными

Слайд 79Модификаторы доступа Java
Определяем класс наследник в другом пакете.
Из класса Child

нет доступа доступа к default членам класса Parent, но есть

доступ к protected и public членам класса Parent.
Модификаторы доступа JavaОпределяем класс наследник в другом пакете.Из класса Child нет доступа доступа к default членам класса

Слайд 80Модификаторы доступа Java
Рассмотрим следующий класс - AccessClass, находящийся в пакете

отличном от класса Parent. Он не является наследником Parent, поэтому

доступ из него разрешен только к public методам.
Модификаторы доступа JavaРассмотрим следующий класс - AccessClass, находящийся в пакете отличном от класса Parent. Он не является

Слайд 81Модификаторы доступа Java
Для класса, не являющегося вложенным, может быть указан

только один из двух возможных уровней доступа:
по умолчанию - если

у класса имеется уровень доступа по умолчанию, такой класс оказывается доступным только для кода из данного пакета.
открытый (public) - если класс объявлен как public, он доступен из любого другого кода.
Когда мы говорим, что код из одного класса (class A) имеет доступ к коду из другого класса (class B), это означает что класс A может делать одну из трех вещей:
создать экземпляр класса B,
наследовать класс B,
иметь доступ к определенным членам класса B.
Модификаторы доступа JavaДля класса, не являющегося вложенным, может быть указан только один из двух возможных уровней доступа:по

Слайд 82Модификаторы доступа Java
В этом примере показана попытка наследовать класс HotBevarage

с уровнем доступа по умолчанию из другого пакета. В этом

случае возникнет ошибка компиляции:
Модификаторы доступа JavaВ этом примере показана попытка наследовать класс HotBevarage с уровнем доступа по умолчанию из другого

Слайд 83Модификаторы доступа Java
Если класс оказывается открытым, он должен быть единственным

открытым классом, объявленным в файле, а имя этого файла должно

совпадать с именем класса. Например:
Модификаторы доступа JavaЕсли класс оказывается открытым, он должен быть единственным открытым классом, объявленным в файле, а имя

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика