import Swift
/* 상속
스위프트의 상속은 클래스, 프로토콜 등에서 가능합니다.
열거형, 구조체는 상속이 불가능합니다.
스위프트는 다중상속을 지원하지 않습니다.
*/
class Person {
var name: String = ""
func selfIntroduce() {
print("저는 \(name)입니다")
}
// final 키워드를 사용하여 재정의를 방지할 수 있습니다.
// 자식 class로 물려줬을 때 덮어쓰지(override) 않게 하기 위한 것입니다.
final func sayHello(){
print("hello")
}
// 타입 메서드
// 재정의 불가 타입 메서드 - 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")
}
}
class Student: Person {
// var name: String = ""
var major: String = ""
override func selfIntroduce() {
print("저는 \(name)이고, 전공은 \(major)입니다.")
}
override class func classMethod(){
print("overriden type method - class")
}
// static을 사용한 타입 메서드는 재정의 할 수 없습니다.
// override static func typeMethod() { }
// final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없습니다.
// override func sayHello() { }
// override class func finalClassMethod() { }
}
let whoami: Person = Person()
let hana: Student = Student()
whoami.name = "realName"
hana.name = "hana"
hana.major = "Swift"
whoami.selfIntroduce() // 저는 realName입니다
hana.selfIntroduce() // 저는 hana이고, 전공은 Swift입니다.
Person.classMethod() // type method - class
Person.typeMethod() // type method - static
Person.finalclassMethod() // type method - final class
Student.classMethod() // overriden type method - class
Student.typeMethod() // type method - static
Student.finalclassMethod() // type method - final class
'Swift > 기초&문법' 카테고리의 다른 글
swift 스위프트 화면 이동 modal push (0) | 2018.09.19 |
---|---|
스위프트 swift 인스턴스 생성 소멸 (0) | 2018.09.04 |
스위프트 swift 프로퍼티 property (0) | 2018.08.31 |
스위프트 swift 클로저 (0) | 2018.08.30 |
스위프트 swift class vs struct / enum 클래스 vs 구조체 / 열거형 (0) | 2018.08.29 |