인프런 커뮤니티 질문&답변

잠꾸님의 프로필 이미지
잠꾸

작성한 질문수

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)

10강. 코틀린에서 상속을 다루는 방법

질문입니다.

작성

·

228

0

안녕하세요.
 
영상 마지막에 open 키워드에 대해서 추상 멤버가 아니면 기본적으로 오버라이드가 불가능하다. open 키워드를 사용해주어야 한다. 라고 말씀해주셨는데요!
 
추상 멤버는 open 키워드 사용 없이 오버라이드가 가능하다는 말씀인 것 같은데요.
 
추상 멤버라고 한다면, 구체적으로 어디까지가 추상 멤버일까요?
 
예를 들어 인터페이스 Swimable의 val swimAblity는 추상 멤버이기 때문에 open 키워드를 사용하지 않았고, 인터페이스를 구현하는 Penguin 클래스에서 override 할 수 있게 된건가요?
 
그런데 추상 클래스 Animal에서는 legCount에 open을 붙여주었는데 추상 클래스의 프로퍼티니까 추상 멤버인 줄 알았는데 아닌건가요?
 
감사합니다.
 
 

답변 1

2

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요 연어포케님!!! 크으~~ 매우 매우 좋은 질문이십니다 ㅎㅎㅎㅎㅎ

'추상 멤버(함수/프로퍼티)'에 대한 정의는 interface와 abstract class에 따라 달라지게 됩니다!

  • interface : 구현체가 없는 경우에 추상 멤버

interface A {
  fun do1() // 추상 멤버 O

  fun do2() { // 추상 멤버 X
    println("인터페이스에 구현도 했다!!")
  }
}

  • abstract class : abstract이 붙어 있는 경우 추상 멤버

abstract class A {
  abstract fun do1() // 추상 멤버 O
  
  fun do2() { // 추상 멤버 X
    println("추상 클래스에서 구현도 했다!!") 
  }
}

함수에 대해서만 예시를 들었지만, 프로퍼티도 똑같다고 생각해주시면 됩니다 ㅎㅎㅎㅎㅎ

추가 설명이 필요하시면 편하게 질문 남겨주시고, 다른 내용에 대해서도 언제든 질문 남겨주세요~!!!!

감사합니다!!! 오늘도 좋은 하루 되세요~ 😊😊

태현님 오래전 질문이지만 이 질문에 관해서도 한가지 추가로 궁금한점이 있습니다.

인터페이스에 default로 구현되어있는 멤버는 추상 멤버가 아니라고 말씀 해주셨는데요.
추상 멤버가 아님에도 불구하고 open 키워드 없이 override를 할 수 있는 이유는 뭘까요?(예를들어 영상 속 act 메소드)
인터페이스에 선언되있는 필드 및 메소드들은 상속을 해야만 사용가능한 항목들 이기 때문에 기본적으로 open을 사용중이라고 생각하면 될까요?

최태현님의 프로필 이미지
최태현
지식공유자

넵넵!

인터페이스에 선언되있는 필드 및 메소드들은 상속을 해야만 사용가능한 항목들 이기 때문에 기본적으로 open을 사용중이라고 생각하면 될까요?

라고 이해해 주셔도 될 것 같습니다. 👍 🙂

관련해서 Kotlin 개발진의 official한 의견을 들어본적은 없는 것 같네요~!! 감사합니다.

잠꾸님의 프로필 이미지
잠꾸

작성한 질문수

질문하기