안녕하세요:)
오늘은 인스턴스를 동일한 클래스 계층에 존재하는 다른 클래스 형식으로 처리하는 방법에 대해서 알아보도록 하겠습니다.
class Figure {
let name: String
init(name: String) {
self.name = name
}
func draw() {
print("draw \(name)")
}
}
class Rectangle: Figure {
var width = 0.0
var height = 0.0
override func draw() {
super.draw()
print("🍏 \(width) x \(height)")
}
}
class Square: Rectangle {
}
let f = Figure(name: "Unknown")
f.name
f.draw() // draw Unknown
let r = Rectangle(name: "Rect")
r.width
r.height
r.name // 상속받은 name 속성에 접근 가능합니다.
r.draw() // 🍏 0.0 x 0.0
let s = Square(name: "Square")
s.width
s.height
s.name
// 상속된 3개의 속성에 접근 가능
class Figure {
let name: String
init(name: String) {
self.name = name
}
func draw() {
print("draw \(name)")
}
}
class Rectangle: Figure {
var width = 0.0
var height = 0.0
override func draw() {
super.draw()
print("🍏 \(width) x \(height)")
}
}
class Square: Rectangle {
}
let f = Figure(name: "Unknown")
f.name
f.draw() // draw Unknown
let r = Rectangle(name: "Rect")
r.width
r.height
r.name // 상속받은 name 속성에 접근 가능합니다.
r.draw() // 🍏 0.0 x 0.0
let s = Square(name: "Square")
s.width
s.height
s.name
// 상속된 3개의 속성에 접근 가능
let downcastedS = s as! Square // 타입 캐스팅 연산자 as
downcastedS.name
downcastedS.width
downcastedS.height
let downcastedS2 = s as! Rectangle
downcastedS2.name
downcastedS2.width
downcastedS2.height
class Rhombus: Square {
var angle = 45.0
}
let dr = s as! Rhombus // 에러!!
// 원본 클래스보다 아래쪽에 있는 서브클래스로 다운캐스팅 하는 것은 허용되지 않습니다.