Вы находитесь на странице: 1из 14

НАСЛЕДОВАНИЕ

Заметки
• Расширение и/или изменение функционала

• Понятия:
• Subсlass
• Superсlass

• Почти все принципы наследования похожи на Java (кроме инициализаторов)


• Нет множественного наследования
• Полиморфизм
• и пр.

• final – запрещает переопределение/расширение (как и в Java)


Компилятор
• При наследовании главная задача компилятора: убедиться что все классы в цепочке инициализируют все свои
свойства

• В Java также по цепочке вызываются все конструкторы, но такое строгой проверки нет, многие свойства могли
оставаться null
Применение override
• Stored property • get/set
• Просто объявить такую же переменную в дочернем • Заменить поведение блоков get/set
классе нельзя (в Java – можно, будет скрытие • Если у родителя есть set - в дочернем классе его
переменной) также обязательно нужно переопределить
• Обязательно переопределять get и set
• Subscript
• Computed property • Заменить функционал
• Можно переопределять только get или get-set
• Если у родителя есть set - в дочернем классе его
• Init
также обязательно нужно переопределить
• Только для designated initializer

• Observers
• Будут вызываться все наблюдатели от родителей до
дочернего
• По сути – не переопределяет, а дополняет

• Методы
• Заменять или добавлять функционал
required init
• required init
• все дочерние классы обязаны переопределить этот init
• У дочернего init необязательно указывать override, т.к. у него будет указан required
init

• Designated initializer должен вызывать родительский designated initializer (как в Java – должна быть
хотя бы одна связь через конструкторы)

• Convenience initializer не вызывает родительские convenience initializer, он может вызывать только


designated initializer или другой convenience initializer из этого же класса
init
Two-phase initialization
1. Сначала инициализация всех своих свойств (затем вызов super, для инициализации родительских свойств)
• До этого момента нельзя использовать и изменять свойства, вызывать другие методы

2. Только после этого можно изменять свойства, вызывать методы (если необходимо) и пр.

• Если коротко описать 2 фазы: сначала происходит инициализация свойств у цепочки классов, затем их использование
(изменение) и весь остальной код
init

Фаза 1 Фаза 2

• Цель – заполнить свойства классов всех • Цель – выполнить кастомный код (если он есть)
классов из цепочки наследования : изменение свойств, вызов методов и пр.

• Сначала каждый subclass убеждается, что все • Выполняется сверху вниз


его свойства заполнены – только потом
вызывает superclass • Изменения самого нижнего класса будут
актуальными (т.к. будет вызываться в конце)
• Выполняется снизу вверх
init
Наследование init
• В Java конструкторы не наследуются (приходится вручную в каждом классе создавать все нужные конструкторы)

• В Swift инициализаторы могут наследоваться в некоторых случаях:


• 1) если в дочернем классе не реализован ни один designated initializer – он наследует все родительские
designated initializer и convenience initializer (в том числе и default initializer – без параметров)

• 2) если дочерний класс переопределяет все родительские designated initializer – дочерний класс автоматически
наследует все convenience initializers из родительского класса

* Компилятор будет вам подсказывать, если не заполните какие-либо свойства или перепутаете порядок инициализации
init
• Не путайте порядок действий:

• designated initializer
• Сначала нужно заполнить свои свойства класса
• Потом вызывать super.init для заполнения свойств родителя

• convenience initializer (наоборот)


• Сначала нужно вызвать self.init
• Потом можно изменять значения свойства (т.к. они были проинициализированы в пред. шаге)
XCode
• Не очень удобные инструменты для генерации init, рефакторинга, переопределений и пр. – особенно после IntelliJ
IDEA и других IDE, к которым привыкли Java разработчики

• Использование сторонних плагинов немного исправляет ситуацию

• С каждой новой версией XСode старается приблизиться к стандартным возможностям IDE


Домашнее задание
• Выполнить Hometask

• Прочитать и выполнить код из этой статьи:


• https://medium.com/@tatsean1977/anatomy-of-initialization-in-swift-3-8778dc45cdf7

• Прочитать:
• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.ht
ml

• Раздел «Class Inheritance and Initialization»


• https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.ht
ml

Вам также может понравиться

  • A414881220 Rezolut
    A414881220 Rezolut
    Документ2 страницы
    A414881220 Rezolut
    Antony Berezovsky
    Оценок пока нет
  • 2 STR
    2 STR
    Документ1 страница
    2 STR
    Antony Berezovsky
    Оценок пока нет
  • STR 1
    STR 1
    Документ1 страница
    STR 1
    Antony Berezovsky
    Оценок пока нет
  • Teoria Dlya 8 Zadania
    Teoria Dlya 8 Zadania
    Документ8 страниц
    Teoria Dlya 8 Zadania
    Antony Berezovsky
    Оценок пока нет
  • 2406 R
    2406 R
    Документ220 страниц
    2406 R
    Antony Berezovsky
    Оценок пока нет
  • Pamyatka Dlya Roditely
    Pamyatka Dlya Roditely
    Документ1 страница
    Pamyatka Dlya Roditely
    Antony Berezovsky
    Оценок пока нет
  • A41-48812-2020 20201105 Reshenija I Postanovlenija
    A41-48812-2020 20201105 Reshenija I Postanovlenija
    Документ11 страниц
    A41-48812-2020 20201105 Reshenija I Postanovlenija
    Antony Berezovsky
    Оценок пока нет
  • 17 Структура
    17 Структура
    Документ11 страниц
    17 Структура
    Antony Berezovsky
    Оценок пока нет
  • 16.Собственные типы
    16.Собственные типы
    Документ7 страниц
    16.Собственные типы
    Antony Berezovsky
    Оценок пока нет
  • Sertifikat TanyaDizayn
    Sertifikat TanyaDizayn
    Документ1 страница
    Sertifikat TanyaDizayn
    Antony Berezovsky
    Оценок пока нет
  • 6th Central Pay Commission Salary Calculator
    6th Central Pay Commission Salary Calculator
    Документ15 страниц
    6th Central Pay Commission Salary Calculator
    rakhonde
    100% (436)
  • 6th Central Pay Commission Salary Calculator
    6th Central Pay Commission Salary Calculator
    Документ15 страниц
    6th Central Pay Commission Salary Calculator
    rakhonde
    100% (436)
  • Forum FizikovEV But
    Forum FizikovEV But
    Документ1 страница
    Forum FizikovEV But
    Antony Berezovsky
    Оценок пока нет
  • 24 Casting PDF
    24 Casting PDF
    Документ4 страницы
    24 Casting PDF
    Antony Berezovsky
    Оценок пока нет
  • 25 Enumeration
    25 Enumeration
    Документ7 страниц
    25 Enumeration
    Antony Berezovsky
    Оценок пока нет
  • 13 Set
    13 Set
    Документ4 страницы
    13 Set
    Antony Berezovsky
    Оценок пока нет
  • 23 Extension PDF
    23 Extension PDF
    Документ7 страниц
    23 Extension PDF
    Antony Berezovsky
    Оценок пока нет
  • 12 Array PDF
    12 Array PDF
    Документ4 страницы
    12 Array PDF
    Antony Berezovsky
    Оценок пока нет
  • 20 Класс
    20 Класс
    Документ7 страниц
    20 Класс
    Antony Berezovsky
    Оценок пока нет
  • 15.Полезные методы PDF
    15.Полезные методы PDF
    Документ4 страницы
    15.Полезные методы PDF
    Antony Berezovsky
    Оценок пока нет
  • 22 Протокол
    22 Протокол
    Документ7 страниц
    22 Протокол
    Antony Berezovsky
    Оценок пока нет
  • 14 Dictionary PDF
    14 Dictionary PDF
    Документ3 страницы
    14 Dictionary PDF
    Antony Berezovsky
    Оценок пока нет
  • 21 Наследование PDF
    21 Наследование PDF
    Документ14 страниц
    21 Наследование PDF
    Antony Berezovsky
    Оценок пока нет
  • 1.Переменные константы PDF
    1.Переменные константы PDF
    Документ6 страниц
    1.Переменные константы PDF
    Antony Berezovsky
    Оценок пока нет
  • 6 Optionals PDF
    6 Optionals PDF
    Документ7 страниц
    6 Optionals PDF
    Antony Berezovsky
    Оценок пока нет
  • 18 Initializer
    18 Initializer
    Документ6 страниц
    18 Initializer
    Antony Berezovsky
    Оценок пока нет
  • Nerics PDF
    Nerics PDF
    Документ4 страницы
    Nerics PDF
    Antony Berezovsky
    Оценок пока нет
  • 26 Error PDF
    26 Error PDF
    Документ5 страниц
    26 Error PDF
    Antony Berezovsky
    Оценок пока нет
  • 8 Замыкания
    8 Замыкания
    Документ7 страниц
    8 Замыкания
    Antony Berezovsky
    Оценок пока нет
  • 2 Типы PDF
    2 Типы PDF
    Документ4 страницы
    2 Типы PDF
    Antony Berezovsky
    Оценок пока нет