상속

클래스가 다른 클래스로부터 프로퍼티, 메서드를 물려받는 것

// 슈퍼클래스
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

Override

슈퍼클래스에서 제공한 메서드를 서브클래스가 자유롭게 재정의하여 사용하기 위한 도구

class Train: Vehicle {
	override func makeNoise() {
		print("choo, choo")
	}
}

let train = Train()
train.makeNoise()
// "choo, choo"

super

서브클래스가 슈퍼클래스의 메서드를 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"

프로퍼티의 override

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"

override된 프로퍼티에 대한 프로퍼티 옵져버

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"

프로퍼티의 override를 막아주는 final

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'...
		}
	}
}
profile
전직 시스템엔지니어, 현직 데이터엔지니어, 하지만 하고 싶은건 iOS 개발

0개의 댓글