Можно ли переопределить (override) статический (static) метод в Swift?

«Можно ли переопределить (override) статический (static) метод в Swift?» — вопрос из категории ООП, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. Статические (static) методы и свойства принадлежат самому типу, а не его экземплярам, и не поддерживают полиморфизм, поэтому их нельзя переопределить в подклассе.

Для создания методов класса, поддерживающих переопределение, используйте ключевое слово class.

Пример:

class Parent {
    class func someMethod() {
        print("Parent method")
    }
}

class Child: Parent {
    override class func someMethod() {
        print("Child method")
    }
}

Почему? Модификатор static является псевдонимом для class final — он делает метод финальным, что исключает возможность переопределения в иерархии наследования.