클래스가 다른 클래스로부터 프로퍼티나 메소드 등을 상속받는 것
상속받는 클래스 : 자식 클래스, 서브 클래스
상속하는 클래스 : 부모 클래스, 슈퍼 클래스
// base class
class Vehicle {
var currentSpeed = 0.0
var description : String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise(){
print("부아앙아아아아앙")
}
}
/*
// sub class
class 클래스 이름 : 부모클래스 이름 {
// 하위 클래스 정의
}
*/
class Bicycle : Vehicle {
var hasBasket = false
}
var bicycle = Bicycle()
bicycle.currentSpeed = 15.0
bicycle.currentSpeed // 15
bicycle.makeNoise() // in Console : 부아앙아아아아앙
// 오버라이딩 : 서브클래스에서 슈퍼클래스의 기능을 자신만의 기능으로 바뀌는 것
// override 키워드를 사용
class Train : Vehicle {
override func makeNoise() {
super.makeNoise() // 슈퍼클래스에서 정의된 것부터 나오고 다음에 오버라이딩 된 특성이 나온다.
print("추추~~")
}
}
let train = Train()
train.makeNoise() // 부아앙아아아아앙, 추추~~
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
// 프로퍼티 옵저버 didSet으로 슈퍼클래스인 Car의 프로퍼티인 gear를 변경한다.
class SomeClass {
// final 키워드를 사용하면 상속이 불가능해진다.
final var something : 1
}