[kotlin] 코틀린에서의 접근 제한자를 사용하여 다형성(polymorphism)을 구현할 수 있나요?
open class Animal {
    open fun makeSound() {
        println("Animal makes a sound")
    }
}

class Dog : Animal() {
    override fun makeSound() {
        println("Dog barks")
    }
}

class Cat : Animal() {
    override fun makeSound() {
        println("Cat meows")
    }
}

fun main() {
    val dog: Animal = Dog()
    val cat: Animal = Cat()

    dog.makeSound()
    cat.makeSound()
}

출력 결과는 다음과 같습니다.

Dog barks
Cat meows

위의 예제에서 open 키워드는 상속이 가능하도록 클래스를 열어두는 역할을 합니다. 그리고 override 키워드는 부모 클래스의 메서드를 자식 클래스에서 재정의하는 역할을 합니다. 이를 통해 접근 제한자를 사용하여 Kotlin에서도 다형성을 구현할 수 있습니다.