1. 추상 클래스

abstract

Java와 다르게extends 키워드는 : 로 바뀌었다! (앞 뒤 띄어쓰기 필수!)

java에서는 @Override 어노테이션을 썼는데, kotlin에서는 override 키워드를 쓴다.

class Cat(
	species: String
) : Animal(species, 4) {

	override fun move() { .. } // override 키워드붙은 함수는 재정의하는 함수를 뜻함
}

상위 추상 클래스 Animal의 프로퍼티를 하위 클래스 Penguin에서 사용하는 예제

class Penguin(
    species: String
) : Animal(species, 2) {

    private val wingCount = 2

    override fun move() {
        println("펭귄이 움직입니다~ 꿱꿱")
    }

    override val legCount: Int
        get() = super.legCount + this.wingCount
}

abstract class Animal(
    protected val species: String,
    protected open val legCount: Int // open 키워드를 붙이지 않으면 상속한 클래스에서 접근X
) {
    abstract fun move()
}

프로퍼티에 대한 override를 할때는 추상 프로퍼티가 아니면 꼭 open 키워드를 붙여야한다.

상위 클래스에 접근하는 키워드는 super로 동일하다.

Java와 동일하게추상 클래스는 인터페이스화 할 수 없다.

  1. 인터페이스