클래스가 다른 클래스로부터 프로퍼티, 메서드를 물려받는 것
// 슈퍼클래스
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \{currentSpeed) miles per hour}"
}
func makeNoise() {}
}
// 서브클래스
class Bicycle: Vehicle {
var hasBasket = false
}
var bicycle = Bicycle()
bicycle.currentSpeed = 15.0
bicycle.currentSpeed
// 15
슈퍼클래스에서 제공한 메서드를 서브클래스가 자유롭게 재정의하여 사용하기 위한 도구
class Train: Vehicle {
override func makeNoise() {
print("choo, choo")
}
}
let train = Train()
train.makeNoise()
// "choo, choo"
서브클래스가 슈퍼클래스의 메서드를 override하는 것과는 별개로, 슈퍼클래스의 메서드를 고정적으로 활용하기 위한 도구
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \{currentSpeed) miles per hour}"
}
func makeNoise() {
print("Turn on the speaker")
}
}
class Train: Vehicle {
override func makeNoise() {
super.makeNoise()
print("choo, choo")
}
}
let train = Train()
train.makeNoise()
// "Turn on the speaker"
// "choo, choo"
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + " in gear \(gear)"
}
}
let car = Car()
car.currentSpeed = 30.0
car.gear = 2
print(car.description)
// "traveling at 30.0 miles per hour in gear 2"
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10) + 1
}
}
}
let automatic = AutomaticCar()
automatic.currentSpeed = 35.0
print("AutomaticCar: \(automatic.description)")
// "AutomaticCar: traveling at 35.0 miles per hour in gear 4"
class Vehicle {
final var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
print("Turn on the speak")
}
}
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + " in gear \(gear)"
}
}
class AutomaticCar: Car {
override var currentSpeed: Double {
// Error! Property overrides a 'final' property...
didSet {
gear = Int(currentSpeed / 10) + 1
// Error! Ambiguous use of 'currentSpeed'...
}
}
}