본문으로 바로가기

재정의란?

클래스의 상속에서 상위클래스의 속성/메서드의 기능을 변형하여 사용하는것

메서드의 재정의

자유롭게 재정의 가능

class Person {
    var id = 0
    var name = "Jimin" // 저장속성은 기본적으로 읽기, 쓰기 지원
    var phoneNumber = "010xxxxxxxx"
    
    func doSomething() {
        print("doSomething")
    }
}

class Student: Person {
    
    var studentId = 0

    override func doSomething() { // 재정의
        print("doAnotherSomething")
    }
}

var person1 = Person()   // Person 인스턴스
var student1 = Student() // Student 인스턴스

person1.doSomething()    // 콘솔: doSomething
student1.doSomething()   // 콘솔: doAnotherSomething

상위클래스의 메서드는 그대로 실행하고 추가기능만 넣고싶은데 어찌해야함?

- super.상위클래스메서드()

- super이란 상위클래스를 의미한다 (self는 자기 자신의 클래스를 의미)

class Person {
    var id = 0
    var name = "Jimin" // 저장속성은 기본적으로 읽기, 쓰기 지원
    var phoneNumber = "010xxxxxxxx"
    
    func doSomething() {
        print("doSomething")
    }
}

class Student: Person {
    
    var studentId = 0

    override func doSomething() {
        super.doSomething()
        print("doAnotherSomething")
        // super.doSomething() (밑에넣으면 당연히 추가한 기능 먼저 실행하고 상위메서드 실행)
    }
}

var student1 = Student() // Student 인스턴스

student1.doSomething()   // 콘솔: doSomething
                         //      doAnotherSomething

 

서브스크립트도 재정의가 가능하다