not bad 한 개발

Swift - override(클래스 상속) 본문

Swift

Swift - override(클래스 상속)

leebean 2021. 11. 3. 13:09

(인덕대학교 컴퓨터소프트웨어학과 iOS프로그래밍기초(21-2학기)한성현 교수님 강의 내용을 변형 및 요약했습니다.)

 

override(클래스 상속)

  • 부모 혹은 상위클래스를 자식 클래스에 재정의한다는 의미입니다.
  • 상속이라는 작업을 하게 되면 부모 클래스에 있는 모든 기능을 자식 클래스에서도 사용이 가능해집니다.
  • 자식에게 상속해주는 부모 클래스는 하나만 가능합니다.
  • 부모와 자식에 같은 메서드가 있으면 자식 클래스에 있는 메서드를 우선적으로 호출합니다.

 

super

  • 부모 메서드의 인스턴스를 초기화 할 때 사용합니다.
  • 만약 부모로 부터 상속을 받고 초기화를 하는데 self 앞에 super를 사용안하면 에러가 납니다.

 

(override 예제 코드)

class woMan {
    var age1 :Int = 20
    var weight2 :Double = 60.5 
    func disPlay (){
        print ("나이:\(age1), 무게:\(weight2)")
    }
    init (myAge :Int , myWeight :Double ){
        self.age1 = myAge
        self.weight2 = myWeight
    }
}
class son : woMan {//상속은 클래스만 가능합니다.
    //비어있지만 woMan의 내용을 가지고 있습니다.
}
 
var Lee1 : woMan = woMan (myAge :10 , myWeight :50.5 )
Lee1.disPlay ()
var Lee2 : son = son (myAge :20 , myWeight :60.5 )
Lee2.disPlay ()
print (Lee2.age1 )

 

(super 예제 코드)

class woMan {
    var age1 :Int = 20
    var weight2 :Double = 60.5 
    func disPlay (){
        print ("나이:\(age1), 무게:\(weight2)")
    }
    init (myAge :Int , myWeight :Double ){
        self.age1 = myAge
        self.weight2 = myWeight
    }
}
class son : woMan {
    var name3 :String
    func disPlays (){
        print ("이름:\(name3), 나이:\(age1), 무게:\(weight2)")
    }
    init (myAge :Int , myWeight :Double , myName :String ){
        self.name3 = myName
        super.init (myAge :myAge , myWeight : myWeight )
    }
}
 
var Lee1 : son = son (myAge :10 , myWeight :50.5 , myName :"LDB")
Lee1.disPlays ()//이름:LDB, 나이:10, 무게:50.5
Lee1.disPlay ()//나이:10, 무게:50.5

 

(super 를 작성 안 할 경우 예제 코드)

class woMan {
    var age1 :Int = 20
    var weight2 :Double = 60.5 
    func disPlay (){
        print ("나이:\(age1), 무게:\(weight2)")
    }
    init (myAge :Int , myWeight :Double ){
        self.age1 = myAge
        self.weight2 = myWeight
    }
}
class son : woMan {
    var name3 :String
    func disPlays (){
        print ("이름:\(name3), 나이:\(age1), 무게:\(weight2)")
    }
    init (myAge :Int , myWeight :Double , myName :String ){
        self.name3 = myName
        //super.init (myAge :myAge , myWeight : myWeight )
    }//'super.init'는 초기화 프로그램에서 반환되기 전에 
    //모든 경로에서 호출되지 않습니다.
    //라는 문구가 나옵니다. 
}
var Lee1 : son = son (myAge :10 , myWeight :50.5 , myName :"LDB")
Lee1.disPlays ()//이름:LDB, 나이:10, 무게:50.5
Lee1.disPlay ()//나이:10, 무게:50.5

'Swift' 카테고리의 다른 글

Swift - access modifier(접근 제어)  (0) 2021.11.03
Swift - extension(확장)  (0) 2021.11.03
Swift - overloading(생성자 중첩)  (0) 2021.11.03
Swift - window VS Mac  (0) 2021.10.28
Swift - Failable Initializers(실패 가능한 생성자)  (0) 2021.10.23
Comments