본문으로 바로가기

지정생성자와 편의생성자 글을 먼저 보고오시는걸 추천드립니다

https://jmin-developer.tistory.com/31

 

 

 

상속관계에서 생성자 위임 규칙

- 자식클래스의 지정생성자는 부모클래스의 지정생성자를 반드시 호출해야함

- 편의생성자는 동일한 클래스의 다른 편의 혹은 지정생성자를 호출해야하고 궁극적으로는 부모클래스의 지정생성자를 호출해야함

- 자식, 부모 클래스의 모든 저장속성 값이 초기화 되야함

상속과 생성자의 관계

class AClass { // 부모클래스
    var x: Int
    var y: Int
    
    init(x: Int, y: Int) { // 부모클래스의 지정생성자
        self.x = x
        self.y = y
    }
}

class BClass: AClass { // 자식클래스
    var z: Int
    
    init(x: Int, y: Int, z: Int) { // 자식클래스의 지정생성자
        self.z = z // 반드시 자식클래스의 저장속성 초기화를 먼저 해야함
        super.init(x: x, y: y) // 부모클래스의 지정생성자 호출
//        self.z = z (본인 클래스의 저장속성을 부모클래스 지정생성자 호출보다 늦게할수는 없다
        
        // 부모클래스의 지정생성자가 호출이 되면
        // 부모클래스의 속성 혹은 메서드에 접근가능 (이때는 super가 아닌 self로 접근)
        self.y = 1
    }
}