Содержание
- 2. План Отношения между классами Приведение ссылочных типов Перечисления Оболочки типов Автоупаковка Перегрузка с дополнительными факторами
- 3. Отношения между классами Большая часть классов приложения связаны между собой. В этом разделе рассмотрим какие бывают
- 4. Отношения между классами IS-A отношения В ООП принцип IS-A основан на наследовании классов или реализации интерфейсов.
- 5. Отношения между классами HAS-A отношения HAS-A отношения основаны на использовании. Выделяют три варианта отношения HAS-A: ассоциация,
- 6. Отношения между классами Начнем с ассоциации. В этих отношениях объекты двух классов могут ссылаться друг на
- 7. Отношения между классами Агрегация и композиция являются частными случаями ассоциации. Агрегация - отношение когда один объект
- 8. Отношения между классами Агрегация Объект класса Halter создается извне Horse и передается в конструктор для установления
- 9. Отношения между классами Композиция Теперь посмотрим на реализацию композиции. Объект класса Halter создается в конструкторе, что
- 10. Приведение ссылочных типов В предыдущих уроках мы рассматривали преобразование примитивных типов. В этом разделе рассмотрим какие
- 11. Приведение ссылочных типов Расширение типов в Java Первый вариант приведения - это расширение. Расширение означает переход
- 12. Приведение ссылочных типов Подобно случаю с примитивными типами, этот переход производится самой JVM при необходимости и
- 13. Приведение ссылочных типов Сужение типов в Java Обратный переход, то есть движение по дереву наследования вниз,
- 14. Приведение ссылочных типов Следующий пример показывает зачем нужны сужающие преобразования. Допустим переменная box1 типа Box6 указывает
- 15. Приведение ссылочных типов При попытке приведения переменной box2, указывающей на объект типа ColorBox, к HeavyBox1, возникнет
- 16. Приведение ссылочных типов instanceof keyword - это двоичный оператор, используемый для проверки, является ли объект (экземпляр)
- 17. Приведение ссылочных типов Представьте объект dog, созданный с помощью Object dog = new Dog(), а затем:
- 18. Приведение ссылочных типов Однако, с Object animal = new Animal(); потому что Animal является супертипом dog
- 19. Приведение ссылочных типов Несовместимые преобразования в Java Преобразования возможны только внутри одной иерархии. Данный пример не
- 20. Приведение ссылочных типов Переходы между массивами и примитивными типами являются запрещенными:
- 21. Приведение ссылочных типов Массив, основанный на примитивном типе, принципиально нельзя преобразовать к типу массива, основанному на
- 22. Приведение ссылочных типов Преобразования между типами массивов, основанных на различных примитивных типах, невозможно:
- 23. Приведение ссылочных типов Массив, основанный на типе HeavyBox, можно привести к массиву, основанному на типе Box,
- 24. Перечисления В Java 5 были введены перечисления, которые создаются с использованием ключевого слова enum. Перечисления указывают
- 25. Перечисления В простейшей форме перечисления - это список именованных констант. Каждая константа перечисления (BIG, HUGE и
- 26. Перечисления Но у перечислений гораздо больше преимуществ по сравнению с таким классом. Какие - рассмотрим чуть
- 27. Перечисления Значения перечислимого типа можно также использовать в управляющем операторе switch. В выражениях ветвей case должны
- 28. Перечисления Перечисление в Java относится к типу класса, но перечисление НЕ может наследоваться от другого класса
- 29. Перечисления Метод values() возвращает массив, содержащий список констант перечислимого типа:
- 30. Перечисления Результат выполнения:
- 31. Перечисления Статический метод valueOf() возвращает константу перечислимого типа, значение которой соответствует символьной строке, переданной в качестве
- 32. Перечисления Вызвав метод ordinal(), можно получить значение, которое обозначает позицию константы в списке констант перечислимого типа.
- 33. Перечисления С помощью метода int compareTo(типПеречисления e) можно сравнить порядковые значения двух констант одного и того
- 34. Перечисления Результат:
- 35. Перечисления Вызвав метод equals(), переопределяющий аналогичный метод из класса Object, можно сравнить на равенство константу перечисления
- 36. Перечисления При сравнении констант перечислений, можно использовать оператор "==" - он будет работать также, как и
- 37. Перечисления Создать экземпляр перечисления с помощью оператора new нельзя, но в остальном перечисление обладает всеми возможностями,
- 38. Перечисления
- 39. Перечисления Методы для перечисления вызываются так же, как и для обычного объекта. В следующем классе мы
- 40. Перечисления Конструкторы в перечислении могут быть перегружены, как показано в следующем примере. Для вызова конструктора без
- 41. Перечисления Перечисления могут быть объявлены: отдельным классом или как член класса. Но НЕ могут быть объявлены
- 42. Перечисления Для обращения к такому перечислению необходимо использовать имя внешнего класс:
- 43. Перечисления Перечисления могут быть объявлены: отдельным классом или как член класса. Но НЕ могут быть объявлены
- 44. Перечисления Для перечислений можно переопределять методы, но это не совсем обычное переопределение. Добавим в наше перечисление
- 45. Перечисления
- 46. Перечисления Перечисления не могут наследовать другие классы, но могут реализовывать интерфейсы. Например, следующее перечисление реализует интерфейс
- 47. Оболочки типов Очень часто необходимо создать класс, основное назначение которого содержать в себе какое-то примитивное значение.
- 48. Оболочки типов К оболочкам типов относятся классы Double, Float, Long, Integer, Short, Byte, Character, Boolean, Void.
- 49. Оболочки типов В следующей таблицы для каждого класса оболочки указан соответствующий примитивный тип и варианты конструкторов.
- 50. Оболочки типов
- 51. Оболочки типов Рассмотрим варианты вызова конструкторов на примере. Чтобы создать объект класса Integer, передаем в конструктор
- 52. Оболочки типов Если передаваемая в конструктор строка не содержит числового значения, то выбросится исключение NumberFormatException. При
- 53. Оболочки типов Как уже было сказано, классы оболочки содержат обширный ряд методов. Рассмотрим их. Метод valueOf()
- 54. Оболочки типов И в целочисленные классы Byte, Short, Integer, Long добавлен еще один метод, в который
- 55. Оболочки типов Методы parseXxx() В каждом классе оболочке содержатся методы, позволяющие преобразовывать строку в соответствующее примитивное
- 56. Оболочки типов Также в целочисленные классы Byte, Short, Integer, Long добавлен метод, в который можно передать
- 57. Оболочки типов Все типы-оболочки переопределяют toString(). Этот метод возвращает читабельную для человека форму значения, содержащегося в
- 58. Оболочки типов Integer и Long позволяют преобразовывать числа из десятичной системы исчисления к шестнадцатеричной, восьмеричной и
- 59. Оболочки типов Все оболочки числовых типов наследуют абстрактный класс Number. Number объявляет методы, которые возвращают значение
- 60. Оболочки типов Пример приведения типов
- 61. Оболочки типов Каждый класс оболочка содержит статические константы, содержащие максимальное и минимальное значения для данного типа.
- 62. Оболочки типов Следующий пример демонстрирует использование трех последних переменных. При делении на ноль возникает ошибка -
- 63. Автоупаковка Автоупаковка и распаковка это процесс преобразования примитивных типов в объектные и наоборот. Весь процесс выполняется
- 64. Автоупаковка Автоупаковка происходит при прямом присвоении примитива классу-обертке (с помощью оператора "="), либо при передаче примитива
- 65. Автоупаковка Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива — типу «класса-обертки». Например, попытка
- 66. Автоупаковка Автоупаковку можно использовать при вызове метода:
- 67. Автоупаковка Внутри выражения числовой объект автоматически распаковывается. Выходной результат выражения при необходимости упаковывается заново:
- 68. Автоупаковка C появлением автоупаковки/распаковки стало возможным применять объекты Boolean для управления в операторе if и других
- 69. Автоупаковка До Java 5 работа с классами обертками была более трудоемкой:
- 70. Автоупаковка Перепишет тот же пример для работы с классами начиная с Java 5:
- 71. Автоупаковка ВАЖНО! Объекты классов оболочек неизменяемые (immutable):
- 72. Автоупаковка Рассмотрим следующий пример: Переменная y указывает на объект в памяти:
- 73. Автоупаковка Если мы попытаемся изменить y, у нас создастся еще один объект в памяти, на который
- 74. Автоупаковка Кэширование объектов классов оболочек Метод valueOf() не всегда создает новый объект. Он кэширует следующие значения:
- 75. Автоупаковка Рассмотрим это на следующем примере:
- 76. Перегрузка с дополнительными факторами Перегрузка методов усложняется при одновременном использовании следующих факторов: расширение автоупаковка/распаковка аргументы переменной
- 77. Перегрузка с дополнительными факторами При расширение примитивных типов используется наименьший возможный вариант из всех методов.
- 78. Перегрузка с дополнительными факторами Расширение и boxing Между расширением примитивных типов и boxing всегда выигрывает расширение.
- 79. Перегрузка с дополнительными факторами Упаковка и расширение Можно упаковать, а потом расширить. Значение типа int может
- 80. Перегрузка с дополнительными факторами Расширение и упаковка Нельзя расширить и упаковать. Значение типа byte не может
- 81. Перегрузка с дополнительными факторами Между расширением примитивных типов и var-args всегда проигрывает var-args:
- 82. Перегрузка с дополнительными факторами Упаковка и var-args совместимы с перегрузкой методов. Var-args всегда проигрывает:
- 84. Скачать презентацию