안녕하세요!!
오늘은 클래스에서 상속을 통해 Super Class로부터 멤버를 상속하는 방법과 Super Class로부터 상속한 멤버를 재정의 하는 방법에 대해서 알아보도록 하겠습니다!!!
class ClassName: SuperClassName { // 문법
}
// Base Class 선언
class Figure {
var name = "Unknown"
init(name: String) {
self.name = name
}
func draw() {
print("draw \(name)")
}
}
class Circle: Figure {
var radius = 0.0
}
let c = Circle(name: "Circle") // Circle 클래스는 생성자가 구현되어 있지 않고, Figure 클래스에서 생성자를 상속받고 있습니다.
c.radius
c.name
c.draw()
final class Rectangle: Figure {
var width = 0.0
var height = 0.0
}
// final 클래스는 상속이 금지된 클래스입니다.
class Square: Rectangle { // 컴파일 에러!
}
class Figure {
var name = "Unknown"
init(name: String) {
self.name = name
}
func draw() {
print("draw \(name)")
}
}
class Circle: Figure {
var radius = 0.0
var diameter: Double {
return radius * 2
}
override func draw() {
super.draw() // Figure에 있는 draw 메소드가 먼저 실행되고, 오버라이딩 된 메소드가 실행됩니다.
print("🍎")
}
}
let c = Circle(name: "Circle")
c.draw() // draw Circle, 🍎
// 이번에는 속성을 오버라이딩 해보겠습니다.
// 속성은 메소드와 오버라이딩 방식이 다릅니다.
class Oval: Circle {
override var diameter: Double {
get {
return super.diameter
}
set {
super.radius = newValue / 2
}
}
override var radius: Double {
get {
return super.radius
}
set {
super.radius = newValue
}
}
}