DAY 13
상속(inheritance)
superclass(부모 class) 와 subclass(자식 class)
상속된 클래스는 부모 클래스의 모든 기능을 상속받으며, 자신만의 기능을 추가
상속받은 클래스들을 하위 클래스(subclass) 또는 자식 클래스(child class)
하위 클래스가 상속받은 클래스는 부모 클래스(parent class) 또는 상위 클래스(super class)
Swift 상속
단일 상속(single inheritance)
Swift에서 하위 클래스는 단 하나의 부모 클래스만 상속받을 수 있음
class 자식: 부모 {
}
- 부모 클래스는 하나만 가능
- 콜론 다음이 여러 개이면 나머지는 프로토콜
class 클래스명: 부모명, 프로토콜명{}
class 클래스명: 프로토콜명{}
상속은 클래스만 가능
클래스, 구조체(struct), 열거형(enum), extension에 프로토콜을 채택(adopt) 할 수 있다
class Man {
var age: Int
var weight: Double
func display() {
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double) {
self.age = age
self.weight = weight
}
}
class Student: Man {
// 비어있지만 Man에 모든 것을 가지고 있음
}
var kim: Man = Man(age:10, weight:20.5)
kim.display()
var lee: Student = Student(age:20, weight:50.2)
lee.display()
Student
클래스는 비어있지만, lee
에서 Student
는 Man
을 상속 받았기 때문에 Man
의 property와 method를 공유한다
super
: 부모 메서드 호출 시 사용
class Student: Man {
var name: String
init(age: Int, weight: Double, name: String) {
self.name = name
super.init(age:age, weight:weight)
}
}
super
키워드를 통하여 부모 메서드 init
initializer를 호출해 주었다
override
부모와 자식에 같은 메서드가 있으면 자식 우선 호출
class Man {
var age: Int
var weight: Double
func display() {
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double) {
self.age = age
self.weight = weight
}
}
class Student: Man {
var name: String
override func display() {
print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double, name: String) {
self.name = name
super.init(age:age, weight:weight)
}
}
var lee: Student = Student(age:20, weight:65.2, name:"홍길동")
lee.display()
부모와 자식에 display()
라는 메서드가 있어서 Student
클래스는 display()
메서드가 두 개임
lee
가 display()
를 호출할 때, 자식클래스가 새로 만든 display()
메서드가 우선적으로 호출되려면 func
앞에 override
키워드를 쓴다
댓글