Содержание
- 2. Понятие класса и объекта Java является объектно-ориентированным языком, поэтому такие понятия, как «класс» и «объект» играют
- 3. Шаблоном или описанием объекта является класс, а объект представляет экземпляр этого класса. Проведем следующую аналогию: У
- 4. Класс - красивым языком Класс – это абстрактный тип данных, описывающий присущие ему свойства, поведение и
- 5. Класс - понятным языком Понятие класса и объекта жук1 жук2 жук3 жук4 жук5 Класс объектов жук#
- 6. Класс - понятным языком Понятие класса и объекта Класс АВТОМОБИЛЬ # что присуще всем автомобилям Имеет
- 7. Класс – путь через желудок Представьте, что вы собираетесь печь булочки и у вас есть специальная
- 8. Определение класса Класс определяется с помощью ключевого слова class. Вся функциональность класса представлена его членами-полями (полями
- 9. Определение класса Например, класс Book мог бы иметь следующие определения: Понятие класса и объекта class Book{
- 10. Конструктор Таким образом, в классе Book определены три переменных и один метод, который печатает значение переменной
- 11. Понятие класса и объекта class Book{ public String name; public String author; public int year; Book(){
- 12. Конструктор Здесь у класса Book определено два конструктора; Первый конструктор без параметров присваивает неопределенные начальные значения
- 13. Конструктор В выражении this.name = name; первая часть this.name означает, что name – это поле текущего
- 14. Понятие класса и объекта class Book{ public String name; public String author; public int year; Book(String
- 15. Конструктор Как видно из примера выше, один конструктор класса может быть вызван из другого конструктора класса
- 16. Чтобы непосредственно использовать класс в программе, необходимо создать его объект. Процесс создания объекта двухступенчатый: Вначале объявляется
- 17. После объявления переменной Book b; эта переменная еще не ссылается ни на какой объект и имеет
- 18. Кроме конструктора начальную инициализацию объекта вполне можно было проводить с помощью инициализатора объекта; Так можно заменить
- 19. Инициализаторы class Book{ public String name; public String author; public int year; { name = “unknown”;
- 20. Как правило, Java классы объединяются в пакеты; Пакеты позволяют логически организовать классы в наборы; По умолчанию
- 21. Чтобы указать, что класс принадлежит определенному пакету, необходимо использовать директиву package, после которой указывается имя пакета;
- 22. В данном случае класс BookStore находится в пакете bookstore; При определении классов в пакеты на жестком
- 23. Если возникает необходимость использовать классы из других пакетов, нужно эти классы и пакеты подключить; Исключение составляют
- 24. В данном случае, необходимо указать полный путь к файлу в пакете при создании его объекта; Однако
- 25. Импорт пакетов и классов Директива import указывается в самом начале кода, после чего идет имя подключаемого
- 26. Импорт пакетов и классов Теперь можно использовать любой класс из пакета java.util; Возможна ситуация, когда используются
- 27. Статический импорт В java есть особая форма импорта – статический импорт. Для этого вместе с директивой
- 28. Статический импорт Здесь происходит статический импорт классов System и Math, которые имеют статические методы; Благодаря операции
- 29. Модификаторы доступа Все члены класса в языке Java – поля и методы, свойства – имеют модификаторы
- 30. Модификаторы доступа https://drive.google.com/drive/folders/1Vd2DgCWnY3_nvN76itZnWwEV5JaaapTF В Java используются следующие модификаторы доступа: public: публичный, общедоступный класс или член класса.
- 31. Статические члены и модификатор static Кроме обычных методов и полей, класс может иметь статические поля, методы,
- 32. Статические члены и модификатор static public class Book { private int id; private static int counter
- 33. Статические члены и модификатор static Класс Book содержит статическую переменную counter, которая увеличивается в конструкторе, и
- 34. Статические члены и модификатор static В примере выше статическая переменная инициализируется сразу, но не редко для
- 35. Статические члены и модификатор static Нередко константы на уровне класса объявляются как статические: Статические методы, подобно
- 36. Статические члены и модификатор static public class Algorithm { public final static double PI = 3.14;
- 37. Статические члены и модификатор static Теперь используем их в программе. И поскольку методы factorial и fibonachi,
- 38. Объекты как параметры методов Объекты классов, как и данные примитивных типов могут передаваться в методы. Однако,
- 39. Объекты как параметры методов В основном класса программы определим два дополнительных метода: public class Book {
- 40. Объекты как параметры методов Здесь определены два метода с одним и тем же именем, но с
- 41. Объекты как параметры методов Правда, среди классов есть и исключения – класс String. Объекты данного класса
- 42. Вложенные и внутренние классы Если определение класса размещается внутри определения другого класса, то такие классы называются
- 43. Вложенные и внутренние классы В свою очередь, внутренние классы (inner classes) имеют два особых подвида: локальный
- 44. Вложенные и внутренние классы Для чего нужен внутренний класс Для понимания сути использования внутреннего класса рассмотрим
- 45. Вложенные и внутренние классы Создадим класс Bicycle (велосипед); У класса Bicycle есть два поля – модель
- 46. Вложенные и внутренние классы Внутренние классы — это классы для выделения в программе некой сущности, которая
- 47. Вложенные и внутренние классы С использованием внутреннего класса код смотрится совсем иначе: public class Main {
- 48. Вложенные и внутренние классы Однако, давайте рассмотрим другую ситуацию: необходимо создать программу, моделирующую магазин велосипедов и
- 49. Вложенные и внутренние классы Статические вложенные классы При объявлении такого класса используется ключевое слово static. public
- 50. Вложенные и внутренние классы В данном примере имеется внешний класс Boeing737, который создает самолет этой модели;
- 51. Вложенные и внутренние классы Отличия между статическим и нестатическим вложенными классами Объект статического класса не хранит
- 52. Вложенные и внутренние классы Отличия между статическим и нестатическим вложенными классами 2. Разный доступ к переменным
- 53. Вложенные и внутренние классы Снова немного «философии» Почему мы сделали класс Drawing статическим, а в прошлой
- 54. Внутренние классы в локальном методе Локальный класс – это класс, который объявляется только в блоке кода
- 55. Внутренние классы в локальном методе Это небольшая программа – валидатор телефонных номеров; Ее метод validatePhoneNumber() принимает
- 56. Внутренние классы в локальном методе Иными словами, имеется один внешний класс с одним методом, который будет
- 57. Внутренние классы в локальном методе Локальный класс можно объявить также просто в блоке кода или даже
- 58. Внутренние классы в локальном методе Особенности локальных классов Объект локального класса не может создаваться за пределами
- 59. Внутренние классы в локальном методе Особенности локальных классов Нельзя объявить интерфейс внутри блока, так как интерфейсы
- 60. Анонимные классы Почему «анонимные»? ☺ Предположим, что имеется основная программа, которая постоянно работает и что-то делает.
- 61. Анонимные классы Почему «анонимные»? ☺ Данный интерфейс будут реализовывать 3 конкретных класса-модуля:
- 62. Анонимные классы Почему «анонимные»? ☺ В данном примере все выглядит логично: Есть система, состоящая из нескольких
- 63. Анонимные классы Почему «анонимные»? ☺ И для такой небольшой работы была написана целая система аж с
- 64. Анонимные классы Почему «анонимные»? ☺ Здесь на помощь приходят анонимные внутренние классы.
- 65. Анонимные классы Что же тут происходит? ☺ Выглядит все так, как будто создается объект интерфейса, но
- 66. Анонимные классы Что же тут происходит? ☺ Обратите внимание на код – в конце стоит точка
- 67. Анонимные классы Что же тут происходит? ☺ Если каждому из анонимных классов-модулей понадобится какое-то отличающееся поведение,
- 68. Анонимные классы Особенности анонимных классов Анонимный класс — это полноценный внутренний класс, поэтому у него есть
- 69. Анонимные классы Особенности анонимных классов Анонимные классы видны только внутри того метода, в котором определены: любые
- 70. Парадигмы ООП
- 71. Инкапсуляция Инкапсуляция – это «упаковка», «сокрытие» данных и каких то методов их обработки в один компонент.
- 72. Инкапсуляция Возьмем нашего жука и опишем класс Класс ЖУК объединяет данные о движущей части и методы
- 73. Инкапсуляция. Другая сторона силы. Сокрытие. Возьмем нашего многострадального жука Жук хранит в себе знание о том,
- 74. Наследование Наследование – механизм, позволяющий описать класс на основе уже существующего. Родитель – класс, от которого
- 75. Наследование Рассмотрим автомобиль и нашего жука. Все мы знаем, что, вообще говоря, наш жук – это
- 76. А в чем смысл? Класс-потомок может пользоваться данными и методами класса-родителя! Класс-потомок может добавлять новые данные
- 77. Полиморфизм Полиморфизм – способность функции обрабатывать различные типы входных данных. Полиморфизмом называется возможность работать с несколькими
- 78. Наглядный пример Давайте опишем класс Person, представляющий отдельного человека: Парадигмы ООП
- 79. Наглядный пример В последствии, мы хотели бы расширить имеющуюся систему классов, добавив в нее класс, описывающий
- 80. Наглядный пример В классе Employee могут быть определены свои поля, методы и конструктор: Парадигмы ООП
- 81. Наглядный пример Еще одно определение полиморфизма: полиморфизм – это способность к изменению функциональности, унаследованной от базового
- 82. Наглядный пример Класс Employee определяет дополнительное поле для хранения компании, в которой работает сотрудник. Кроме того,
- 83. Наглядный пример Используя обращение к методам базового класса, можно было бы переопределить метод displayInfo() следующим образом:
- 84. Запрет наследования Хотя наследование очень интересный и эффективный механизм, но в некоторых ситуациях его применение может
- 85. Запрет наследования Кроме запрета наследования можно также запретить переопределение отдельных методов. Запретим переопределение метода displayInfo(): Парадигмы
- 86. Кроме обычных классов в Java есть абстрактные классы. Абстрактный класс похож на обычный класс, в нем
- 87. Кроме обычных методов абстрактный класс может содержать абстрактные методы. Такие методы определяются с помощью ключевого слова
- 88. Зачем нужны абстрактные классы Предположим, что перед разработчиком стоит задача написать программу для обслуживания банковских операций.
- 89. Зачем нужны абстрактные классы Абстрактные классы
- 90. Ранее говорилось о преобразовании объектов простых типов. Однако с объектами классов все происходит немного по другому.
- 91. Иерархия наследования и преобразование типов
- 92. В такой иерархии можно проследить следующую цепь наследования: Иерархия наследования и преобразование типов Object Person Employee
- 93. Используем классы в программе и проведем несколько преобразований: Иерархия наследования и преобразование типов
- 94. Здесь вначале создаются две переменные типов Object и Person, которые хранят ссылки на объекты Employee и
- 95. Добавим новый класс Manager, который будет наследоваться от класса Employee и поэтому будет находиться в самом
- 96. Здесь снова видно восходящее преобразование Manager к Employee. И, так как метод displayInfo() есть у класса
- 97. Механизм наследования очень удобен, но он имеет свои ограничения – наследование возможно только от одного класса,
- 98. В IDE интерфейс создается так же, как и обычный класс. В Intelij IDEA это можно сделать
- 99. Чтобы класс применил интерфейс, надо использовать ключевое слово implements. При этом надо учитывать - если класс
- 100. Потом, в главном классе мы можем использовать данный класс и его метод print(): В то же
- 101. Для чего нужны интерфейсы Простой пример интерфейса из повседневной жизни — пульт от телевизора. Он связывает
- 102. Для чего нужны интерфейсы Интерфейс описывает поведение, которым должны обладать классы, реализующие этот интерфейс. «Поведение» —
- 103. Для чего нужны интерфейсы И теперь мы можем просто создавать наши классы-мессенджеры, имплементируя этот интерфейс. Компилятор
- 104. Для чего нужны интерфейсы Какие преимущества это дает? Самое главное из них — слабая связанность. Интерфейсы
- 105. Для чего нужны интерфейсы Давайте представим, что мы проектируем программу, в которой у нас будут собраны
- 106. Для чего нужны интерфейсы В данном случае, у клиента мы создали три поля для трех разных
- 107. Для чего нужны интерфейсы Но зачем нам для этого именно интерфейсы? Зачем их вообще добавили в
- 108. Для чего нужны интерфейсы Приложение и мессенджер, конечно, похожи, но все-таки это разные вещи. Мессенджер может
- 109. Для чего нужны интерфейсы Интерфейсы
- 110. Для чего нужны интерфейсы Теперь можно использовать класс Telegram и в роли Application, и в роли
- 111. Ранее до JDK 8 при реализации интерфейса необходимо было обязательно реализовать все его методы в классе,
- 112. Начиная с JDK 8 в интерфейсах доступны также статические методы - они аналогичны методам класса: Чтобы
- 113. По умолчанию все методы в интерфейсе фактически имеют модификатор public. Однако начиная с Java 9 стало
- 114. Кроме методов в интерфейсах могут быть определены статические константы: Хотя такие константы также не имеют модификаторов,
- 115. Интерфейсы, как и классы, могут наследоваться: При применении этого интерфейса класс Book должен будет реализовать как
- 116. Вложенные интерфейсы Как и классы, интерфейсы могут быть вложенными, то есть могут быть определены в классах
- 117. Интерфейсы как параметры и результаты методов Интерфейсы могут использоваться в качестве типа параметров метода или в
- 118. Интерфейсы как параметры и результаты методов Метод read() в качестве параметра принимает объект интерфейса Printable, поэтому
- 119. Интерфейсы в механизме обратного вызова Одним из распространенных способов использования интерфейсов в Java является создание обратного
- 120. Интерфейсы в механизме обратного вызова Давайте рассмотрим пример.
- 121. Интерфейсы в механизме обратного вызова Итак, определим класс Button, который в конструкторе принимает объект интерфейса EventHandler
- 122. Интерфейсы в механизме обратного вызова Но, казалось бы, зачем выносить все действия в интерфейс, а потом
- 123. Интерфейсы в механизме обратного вызова Давайте изменим главный класс программы.
- 124. Интерфейсы в механизме обратного вызова Здесь имеется две кнопки - одна для включения-выключения телевизора, а другая
- 125. Перечисления (enum) в Java Представим, что перед разработчиком поставили задачу создать класс, представляющий дни недели. На
- 126. Перечисления (enum) в Java Вроде бы, все в порядке, НО в конструктор класса DayOfWeek можно передать
- 127. Перечисления (enum) в Java
- 128. Перечисления (enum) в Java В чем здесь особенность: Закрытый (private) конструктор. Если конструктор помечен модификатором private,
- 129. Перечисления (enum) в Java Такой подход во многом позволял решить задачу. В распоряжении пользователя были 7
- 130. Перечисления (enum) в Java Давайте опишем с помощью enum тип данных для хранения времени года: Ну
- 131. Перечисление — это класс. Объявляя enum мы неявно создаем класс, производный от java.lang.Enum. Условно, конструкция enum
- 132. Элементы перечисления — экземпляры enum-класса, доступные статически. Элементы enum Season (WINTER, SPRING и т.д.) — это
- 133. Перечисления (enum) в Java Пример использования методов name(), toString() и ordinal().
- 134. Методы перечислений. valueOf(String name) – получение элемента enum по строковому представлению его имени. Cледует обратить внимание,
- 135. Пользовательские методы в перечислениях. Существует возможность добавлять собственные методы как в enum-классы, так и в их
- 136. Наследование в enum. Полиморфный подход к перечислениям. С помощью enum в Java можно реализовать иерархию классов,
- 137. Перечисления (enum) в Java
- 138. Наследование в enum. Полиморфный подход к перечислениям. Здесь объявляется перечисление Type с тремя элементами INT, INTEGER
- 139. Наследование в enum. Полиморфный подход к перечислениям. Вывод: Видно, что компилятор создал класс Type и 3
- 140. В Java есть специальный суперкласс Object, и все классы являются его подклассами. Cсылочная переменная класса Object
- 141. Класс Object и его методы
- 142. toString() метод Этот метод позволяет получить текстовое описание любого объекта или его строковое представление: Стандартный результат
- 143. toString() метод В классах Student и Car метод toString() должен быть переопределен, если мы желаем увидеть
- 144. toString() метод В классах Student и Car метод toString() должен быть переопределен, если мы желаем увидеть
- 145. На протяжении всей истории развития языка Java, он претерпевал изменения. Иногда изменения носили косметический характер, иногда
- 146. Наверняка, большинство уже сталкивалось с подобного рода объявлениями: В качестве обобщенного типа, в данном случае, выступает
- 147. Причины появления обобщенных типов Основное назначение обобщенных типов – более строгая проверка типов во время компиляции
- 148. Причины появления обобщенных типов Проблем с компиляцией данного кода не возникнет. Однако, что если заказчик продукта
- 149. Причины появления обобщенных типов Всё дело в том, что коллекция List хранит список объектов типа Object.
- 150. Причины появления обобщенных типов Выходит, там где нам нужен конкретный тип, а не Object, необходимо делать
- 151. Причины появления обобщенных типов И самое плохое в этом случае – компилятор не увидит ничего подозрительного.
- 152. Причины появления обобщенных типов Теперь в приведении к String больше нет необходимости. Нужный тип указывается в
- 153. Причины появления обобщенных типов Многие называют дженерики “синтаксическим сахаром”, что небезосновательно, так как дженерики действительно при
- 154. Существуют две категории дженериков: Сырые типы (Raw Types) Типизированные типы (Generic Types) Сырые типы — это
- 155. При создании объекта обобщенного типа с помощью конструктора в последних версиях Java второй раз тип можно
- 156. Если в левой части указан дженерик, а справа не указан, компилятор сможет вывести тип: Однако, так
- 157. Обобщенные типы (Generics) Однако, если в объявление добавить , сообщение тут же исчезнет. Т.е. без diamond
- 158. Еще один пример: В третьей строке будет выброшена ошибка, так как невозможно переменной типа Integer присвоить
- 159. Однако после добавления скобок сразу же появляется сообщение об ошибке: Отсюда вытекает основное правило - всегда
- 160. Обобщенные методы (Generic Methods) Обобщенные типы (Generics) Дженерики позволяют типизировать методы. Рассмотрим пример:
- 161. Обобщенные методы (Generic Methods) В классе Util объявлено два типизированных метода. Благодаря возможности выведения типов можно
- 162. Обобщенные методы (Generic Methods) В примере выше в классе HelloWorld создан вложенный статический класс Util, возвращающий
- 163. Обобщенные методы (Generic Methods) Обобщенные типы (Generics)
- 164. Обобщенные методы (Generic Methods) Все будет прекрасно работать до тех пор, пока компилятор будет понимать, что
- 165. Обобщенные методы (Generic Methods) Обобщенные типы (Generics) Компилятор видит, что тип никто не указал, следовательно, тип
- 166. Обобщенные классы (Generic Types) Типизировать можно не только методы, но и сами классы. Давайте создадим и
- 167. Обобщенные классы (Generic Types) Буква Т в определении класса class Bank указывает, что данный тип Т
- 168. Обобщенные классы (Generic Types) При использовании обобщенных классов необходимо учитывать, что они работают только с объектами,
- 169. Ограничения Представим, что у нас имеется интерфейс ITicket, который представляет билет на одну поездку. В автомате
- 170. Ограничения Обобщенные типы (Generics) 1 2 3 4
- 171. Ограничения В качестве ограничения можно задать не только интерфейс, но и класс. Также можно установить сразу
- 172. Ограничения Обобщенные типы (Generics) 3 2 1 4 5
- 173. Ограничения Обобщенные типы (Generics) 6 7
- 174. Использование нескольких универсальных параметров Можно задать сразу несколько универсальных параметров и ограничения к каждому из них:
- 175. Подстановки (wildcards) В обобщённом коде знак вопроса (?), называемый подстановочным символом, означает любой тип. Рассмотрим пример:
- 176. Подстановки (wildcards) Для организации иерархии фигур создадим абстрактный класс Shape. Создадим конкретные классы-фигуры – круг и
- 177. Подстановки (wildcards) Но если немного изменить сигнатуру метода на drawAll(List shapes), ошибка тут же исчезнет: Обобщенные
- 178. Подстановки (wildcards) Теперь в метод можно передать список объектов, наследующихся от класса Shape. Подстановка ? выставляет
- 179. Обобщенные конструкторы Обобщенные типы (Generics) Здесь конструктор класса Operation типизируется типом Т, который должен быть унаследован
- 180. Обобщенные интерфейсы Интерфейсы, как и классы, тоже могут быть обобщенными. Например: Обобщенные типы (Generics)
- 181. Наследование и обобщение Обобщенные классы могут участвовать в иерархии наследования: могут наследоваться от других, либо выполнять
- 182. Наследование и обобщение Варианты использования классов: При этом класс-наследник может добавлять и использовать какие-то свои параметры
- 183. Наследование и обобщение Класс-наследник вообще может не быть обобщенным: Обобщенные типы (Generics) Здесь при наследовании явным
- 184. Наследование и обобщение Также может быть ситуация, когда базовый класс является обычным необобщенным классом: В этом
- 185. Преобразование обобщенных типов Объект одного обобщенного типа можно привести к другому типу, если они используют один
- 186. Ссылочные типы При работе с объектами классов надо учитывать, что они все представляют ссылочные типы, то
- 187. Ссылочные типы Здесь создаются два объекта Book, и один объект присваивается другому. Но, несмотря на то,
- 188. Клонирование объектов Чтобы избежать этой проблемы, необходимо создать отдельный объект для переменной book2, например, с помощью
- 189. Клонирование объектов Затем с помощью вызова этого метода можно осуществить клонирование: Однако, данный способ осуществляет неполное
- 190. Клонирование объектов Ссылочные типы и клонирование объектов
- 191. Клонирование объектов Если мы попробуем изменить автора книги, нас последует неудача: Потому что, хотя переменные book
- 193. Скачать презентацию