[코틀린인액션] 상속 제어 변경자

상속 가능성 변경자

  • 기본 상태와 final 변경자
    • 클래스와 메서드가 기본적으로 상속이 불가능한 final 상태이다.
    • 클래스의 상속을 제한하기 위한 방법임.
    • 상속의 허용은 클래스나 메서드에 open 변경자를 붙여줘야한다
    open class RichButton : Clickable { 
        fun disable(){} // 이 함수는 final입니다. 하위 클래스가 이 메서드를 오버라이드할 수 없습니다.
        open fun animate() {} // 이 함수는 open입니다. 하위 클래스에서 이 메서드를 오버라이드할 수 있습니다.
        override fun click() {} // 이 함수는 상위 클래스에서 선언된 open 메서드를 오버라이드합니다. 오버라이드한 메서드는 기본적으로 open입니다.
    }
  • override 와 final 변경자
    • 기반 클래스나 인터페이스의 멤버를 오버라이드하는 경우
    • 해당 메서드는 기본적으로 open 상태이다.
      • 하위 클래스에서 또 다시 오버라이드가 가능합니다.
      • 이를 막기 위해서는 오버라이드 메서드 앞에 final 이 붙어야함
    open class RichButton : Clickable {
        final override fun click() {} // 상위 클래스에서 선언된 open 메서드를 오버라이딩. final 로 이후 상속이 불가능하게 명시
    }

추상 클래스와 abstract 변경자

  • 추상 클래스의 선언
    • 클래스를 abstract 로 선언이 가능하다.
    abstract class Animated {
      abstract fun animate() // 추상 메서드. 기본적으로 open이다.
      open fun stopAnimating() {} // 비추상 메서드. 기본적으로 final이다. 원한다면 final 로  오버라이드 허용 가능
      fun animateTwice() {} // final이다.
    }


Uploaded by N2T