DevPrep

Все темы › Объектно-ориентированное программирование (ООП)

Полиморфизм

Junior

Суть

Полиморфизм — возможность работать с разными типами через один интерфейс: один вызов, разные реализации. «Один интерфейс — много реализаций». В Swift есть четыре практически важных вида.

Виды в Swift

// 1. Subtype polymorphism: class hierarchy, vtable dispatch
class Animal { func sound() -> String { "..." } }
class Dog: Animal { override func sound() -> String { "Woof" } }

// 2. Protocol polymorphism: witness table (existential `any`)
protocol Drawable { func draw() -> String }
struct Square: Drawable { func draw() -> String { "□" } }
struct Dot: Drawable { func draw() -> String { "•" } }
let items: [any Drawable] = [Square(), Dot()]
print(items.map { $0.draw() }.joined())   // □•

// 3. Parametric polymorphism: generics, static dispatch + specialization
func largest<T: Comparable>(_ values: [T]) -> T? { values.max() }
print(largest([3, 9, 2]) ?? 0)   // 9
print(largest(["b", "a"]) ?? "") // b

// 4. Ad hoc polymorphism: overloading
func describe(_ x: Int) -> String { "int \(x)" }
func describe(_ x: String) -> String { "string \(x)" }
print(describe(1), describe("a"))   // int 1 string a

На что смотрит интервьюер

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store