상속
클래스, 프로토콜: 상속 가능
열거형, 구조체: 상속 불가능
다중상속은 미지원
클래스의 상속과 재정의
class 이름: 상속받을 클래스 이름 {
/* 구현부 */
}
// 기반 클래스 Actor
class Actor {
var name: String = ""
func selfIntroduce() {
print("안녕하세요 저는 \(self.name) 배우입니다.")
}
// final 키워드를 사용하여 재정의를 방지할 수 있다.
final func myName() {
print("안녕하세요 저는 actor 클래스 내에 있습니다.")
}
// 타입 메서드
// 재정의 불가 타입 메서드 - static
static func typeMethod() {
print("type method - static")
}
// 재정의 가능 타입 메서드 - class
class func classMethod() {
print("type method - class")
}
/*
재정의 가능한 class 메서드라도
final 키워드를 사용하면 재정의 할 수 없다.
메서드 앞의 'static'과 'final class'는 같은 역할을 한다.
*/
final class func finalClassMethod() {
print("type method - final class")
}
}
// Actor를 상속받는 Movie
class Movie: Actor {
var movieTitle: String = ""
override func selfIntroduce() {
print("영화 제목: \(self.movieTitle), 출연 배우: \(self.name)")
}
override class func classMethod() {
print("overrided type method - class")
}
// static을 사용한 타입 메서드는 재정의 할 수 없습니다
// override static func typeMethod() { }
// final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없습니다
// override func sayHello() { }
// override class func finalClassMethod() { }
}
동작 확인
var jerry: Actor = Actor()
jerry.name = "김제리"
jerry.selfIntroduce() // 안녕하세요 저는 김제리 배우입니다.
var ironMan: Movie = Movie()
ironMan.movieTitle = "아이언맨"
ironMan.name = "로버트"
ironMan.selfIntroduce() // 영화 제목: 아이언맨, 출연 배우: 로버트
'Swift > 기본' 카테고리의 다른 글
옵셔널 체이닝 (0) | 2024.04.06 |
---|---|
인스턴스의 생성과 소멸 (0) | 2024.04.05 |
프로퍼티 (0) | 2024.04.03 |
Class vs Struct / Enum (0) | 2024.04.03 |
열거형 (0) | 2024.04.02 |