- This topic has 3개 답변, 2명 참여, and was last updated 3 years, 10 months 전에 by 야곰.
1 답변 글타래를 보이고 있습니다
-
글쓴이글
-
-
ljwon1995참가자
- 글작성 : 1
- 답글작성 : 1
class Coffee{ let name: String let shot: Int var description: String{ "(shot) shot(s) (name)" } init(shot: Int){ self.shot = shot self.name = "coffee" } } class Latte: Coffee{ var flavor: String override var description: String{ "(shot) shot(s) (flavor) latte" } init(flavor: String, shot: Int){ self.flavor = flavor super.init(shot: shot) } } let yourCoffee: Latte = Latte(flavor: "vanilla", shot: 3) let casted: Coffee = yourCoffee as Coffee print(casted.description) /* 3 shot(s) vanilla latte */print(casted.description) 에서 casted가 Coffee 타입이니 Coffee 클래스에 정의된 메서드가 호출될 것으로 기대했었는데 (3 shot(s) coffee)
실제로는 casted에 담긴 인스턴스의 원 타입의 메서드가 호출되는 듯 하네요 (Latte 클래스)혹시 제가 생각했던대로, Coffee 클래스에 정의된 메서드를 호출하고 싶으면 어떤 과정을 거쳐야할까요?
2021-02-03 오후 2:46 #40555 -
-
ljwon1995참가자
- 글작성 : 1
- 답글작성 : 1
답변 너무 감사드립니다 🙂
마크 다운 문법에 맞게 수정도 하였습니다 ㅎㅎ
두가지 더 여쭤보면,,
class Coffee{ let name: String let shot: Int var description: String{ "(shot) shot(s) (name)" } init(shot: Int){ self.shot = shot self.name = "coffee" } } class Latte: Coffee{ var flavor: String override var description: String{ "(shot) shot(s) (flavor) latte" } init(flavor: String, shot: Int){ self.flavor = flavor super.init(shot: shot) } } let aCoffee: Coffee = Latte(flavor: "Vanilla", shot: 1) let anotherCoffee: Latte = Latte(flavor: "Chocolate", shot: 2) if let castedCoffee: Coffee = anotherCoffee as? Coffee{ print("CAST SUCCEEDED") } if let castedLatte: Latte = aCoffee as? Latte{ print("CAST SUCCEEDED") }1.
자식클래스를 부모 클래스로 형변환 하는 것이나,
부모 클래스를 자식 클래스로 형변환 하는 것 모두 “다운”캐스팅이라고 부르나요?
2.
위에 원래 제가 했던 질문이 스위프트에서는 불가능하다면, 그럼 자식 클래스를 부모 클래스로 형 변환하여 활용될 일이 없다고 느껴지는데,
그럼에도 활용하는 케이스가 있을까요?
2021-02-03 오후 5:25 #40578
-
-
-
글쓴이글
1 답변 글타래를 보이고 있습니다
- 답변은 로그인 후 가능합니다.