Skip to content

Latest commit

 

History

History
41 lines (28 loc) · 2.37 KB

Abstract class.md

File metadata and controls

41 lines (28 loc) · 2.37 KB

Abstract class

Статус Ожидание Реальность
⚠️ Можно наследоваться от абстрактного класса, IDE подсказывает какие методы надо переопределить В IDE нет подсказок о необходимости переопределить абстрактный метод

Пояснения

Опишем простой абстрактный класс на Kotlin-е:

abstract class AbstractClassExample(
    val param1: String
) {
    abstract fun forOverride(): String
}

В Swift-коде мы можем сделать наследника этого класса, но IDE не подсказывает нам, что метод forOverride нужно переопределить.

class MySwiftChild : AbstractClassExample {
    
    // Можно не переопределять метод forOverride, код успешно скомпилируется.

}

При попытке использовать этот метод приложение упадёт с NSGenericException.

В Objective-C, похоже, нет понятия abstract class, и в Swift - тоже.

В отказе от абстрактных классов есть смысл, что-то вроде "предпочитайте композицию, а не наследование", но после Java это может оказаться неудобным.

Самое близкое понятие к абстрактному классу в Swift - это @protocol. Поверх протокола можно описать extension-ы, можно описывать дефолтные реализации методов. И будет примерно то же самое, что и абстрактный класс.


Оглавление