생성자의 재정의
- 생성자는 기본적으로 상속이 아닌 재정의 원칙
- 상위 지정생성자는 재정의 필수 고려 (지정생성자, 편의생성자, 재정의 안함 모두 가능)
- 상의 편의생성자는 재정의 불가능
- 지정생성자로 재정의시 현재단계의 모든 저장속성 초기화 및 상위의 지정생성자 호출
- 편의생성자로 재정의시 현재단계의 지정생성자 호출
class Person {
var id = 10
var name = "Jimin"
var age = 24
init(id: Int, name: String, age: Int) {
print("super 지정 호출")
self.id = id
self.name = name
self.age = age
}
}
// 1. 편의생성자로 재정의
class Student: Person {
var studentId: Int
init(studentId: Int, id: Int, name: String, age: Int) {
self.studentId = studentId
super.init(id: 1, name: "Jimin", age: 24)
}
// 편의생성자로 재정의시 현재 단계의 지정생성자 호출
override convenience init(id: Int, name: String, age: Int) {
self.init(studentId: 3, id: id, name: name, age: age)
}
}
class Person {
var id = 10
var name = "Jimin"
var age = 24
init(id: Int, name: String, age: Int) {
print("super 지정 호출")
self.id = id
self.name = name
self.age = age
}
}
// 1. 지정생성자로 재정의
class Student: Person {
var studentId: Int
// 지정생성자로 재정의시 부모의 지정생성자 호출
override init(id: Int, name: String, age: Int) {
self.studentId = 3
super.init(id: id, name: name, age: age)
}
}
- 자식클래스에서 저장속성 기본값 설정 및 어떠한 생성자도 구현 안했을때 지정생성자 자동 상속
- 상위 지정생성자를 모두 상속하는 경우(상위의 지정생성자 모두 재정의) 편의생성자 자동상속
class Person {
var id = 10
var name = "Jimin"
var age = 24
init(id: Int, name: String, age: Int) {
self.id = id
self.name = name
self.age = age
}
convenience init() {
self.init(id: 10, name: "Jimin", age: 24)
}
}
class Student: Person {
// 저장속성 기본값 설정
var studentId: Int = 3
// 어떠한 생성자도 구현 안할시 상위 지정생성자 자동 상속
}

class Person {
var id = 10
var name = "Jimin"
var age = 24
init(id: Int, name: String, age: Int) {
self.id = id
self.name = name
self.age = age
}
convenience init(_ coninit: Int) {
self.init(id: 10, name: "Jimin", age: 24)
}
}
class Student: Person {
// 저장속성 기본값 설정
var studentId: Int = 3
override init(id: Int, name: String, age: Int) {
super.init(id: 10, name: "Jimin", age: 24)
}
// 모든 지정생성자를 재정의하거나 자동상속했을경우 편의생성자도 자동 상속
}
