코딩하는 제리

[Swift] 상속, super, override 본문

iOS/SwiftUI

[Swift] 상속, super, override

JerryCho 2022. 1. 12. 09:24

 

class Man {
	var age: Int = 1
    var weight: Double = 3.5
    
    func display() {
    	print("\(age), \(weight)")
    }
    
    init(age: Int, weight: Double) {
    	self.age = age
        self.weight = weight
    }
}

class Student: Man {
	// 비어있지만 Man의 모든 것을 가지고 있음.
}

var people: Man = Man(age: 10, weight: 20.5)
people.display()

// 비어있는 Student 클래스 객체 생성
var jerry: Student = Student(age: 20, weight: 60.0)
jerry.display()		// 부모 클래스의 메서드
print(jerry.age)	// 부모 클래스의 변수

 

super 키워드

class Man {
	var age: Int = 1
    var weight: Double = 3.5
    
    func display() {
    	print("\(age), \(weight)")
    }
    
    init(age: Int, weight: Double) {
    	self.age = age
        self.weight = weight
    }
}

class Student: Man {
	var name: String = "jerry"
    
    func displayS() {
    	print("\(name)")
    }
    
    init(age: Int, weight: Double, name: String) {
    	super.init(age: age, weight: weight)	// 부모 클래스 생성자
        self.name = name
    }
}

// age, weight 부모 클래스 변수
// name 자식 클래스 변수
var jerry: Student = Student(age: 20, weight: 60.0, name: "jerrycho")
jerry.display()		// 부모 클래스의 메서드
jerry.displayS()	// 자식 클래스의 메서드

 

override

- 부모와 자식에 같은 메서드가 있으면 자식 우선

class Man {
	var age: Int = 1
    var weight: Double = 3.5
    
    func display() {
    	print("\(age), \(weight)")
    }
    
    init(age: Int, weight: Double) {
    	self.age = age
        self.weight = weight
    }
}

class Student: Man {
	var name: String = "jerry"
    
    override func display() {
    	print("\(age), \(weight), \(name)")
    }
    
    init(age: Int, weight: Double, name: String) {
    	super.init(age: age, weight: weight)	// 부모 클래스 생성자
        self.name = name
    }
}

var jerry: Student = Student(age: 20, weight: 60.0, name: "jerrycho")
jerry.display()		// override한 부모 클래스의 메서드

 

 

'iOS > SwiftUI' 카테고리의 다른 글

[Swift] 접근 제어  (0) 2022.01.12
[Swift] extension  (0) 2022.01.12
[Swift] method overloading (생성자 중첩)  (0) 2022.01.12
[Swift] 클래스 메서드 (타입 메서드)  (0) 2022.01.12
[Swift] call by reference  (0) 2022.01.12
Comments