상속이란?
부모가 자식에게 재산을 물려주는 행위입니다.
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour" //"traveling at 30.0 miles per hour in gear 2"
}
func makeNoise() {
print("speaker on") //"speaker on"
}
}
/*
class 클래스 이름: 부모클래스 이름 {
//하위 클래스 정의
}
*/
class Bicycle: Vehicle {
var hasBasket = false
}
var bicycle = Bicycle() //Bicycle
bicycle.currentSpeed //0
bicycle.currentSpeed = 15.0 //Bicycle
bicycle.currentSpeed //15
//오버라이딩 - 서브클래스는 슈퍼클래스에서 정의된 메서드,프로퍼티,서브스크립를 그대로 사용하지않고 자신만의 기능으로 변경하여 사용할 수 있습니다.
//오버라이딩을 하기위해는 오버라이드 키워드 사용, 만약 같은 이름의 정의가 슈퍼클래스에 없으면 오버라이드 키워드 사용하면 컴파일러 오류
//슈퍼클래스에 동일한 이름의 정의가 있어도 오버라이드 키워드를 사용하지않으면 오류
class Train: Vehicle {
override func makeNoise() {
super.makeNoise() //슈퍼클래스의 특성을 사용
print("choo choo") //"choo choo\n"
}
}
let train = Train() //Train
train.makeNoise() //Train
//프로퍼티를 오버라이딩하는 방법
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + " in gear \(gear)" //"traveling at 35.0 miles per hour in gear 4\n"
}
}
let car = Car() //Car
car.currentSpeed = 30.0 //Car
car.gear = 2 //Car
print(car.description) //"traveling at 30.0 miles per hour in gear 2\n"
//상속된 프로퍼티에 오버라이드를 사용해서 프로퍼티 옵저버도 추가 가능
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10) + 1 //AutomaticCar
}
}
}
let automatic = AutomaticCar() //AutomaticCar
automatic.currentSpeed = 35.0 //AutomaticCar
print("AutomaticCar: \(automatic.description)") //"AutomaticCar: traveling at 35.0 miles per hour in gear 4\n"
//메서드 프로퍼티, 타입 프로퍼티가 오버라이드 되는걸 방지하려면 키워드 앞에 final을 작성(오버라이드 사용불가)
//클래스에 정의할때도 사용 가능, 클래스 키워드 앞에 파이널을 작성하면 해당 클래스를 슈퍼클래스로 하는 서브클래스 생성불가
'개발 > Ios(Swift)' 카테고리의 다른 글
IOS 스위프트(Swift) 문법 - assert와 guard (0) | 2021.08.23 |
---|---|
IOS 스위프트(Swift) 문법 - 타입캐스팅 (0) | 2021.08.19 |
IOS 스위프트(Swift) 문법 - 클래스와 구조체의 차이 (0) | 2021.08.19 |
IOS 스위프트(Swift) 문법 - 프로퍼티 (0) | 2021.08.17 |
IOS 스위프트(Swift) 문법 - 초기화 구문 init (0) | 2021.08.17 |