상속은 왜 필요할까?
두 관점에서 코틀린의 상속에 대해서 알아보자.
Animal 클래스를 상속받은 서브 클래스(Dog, Cat)을 선언하고 각 클래스만의 함수를 선언해주자.
fun main() {
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
var c = Cat("루어", 1)
a.introduce()
b.introduce()
b.bark()
c.meow()
}
open class Animal(var name:String, var age:Int, var type:String){
fun introduce() {
println("저는 ${type} ${name}이고, ${age}살 입니다.")
}
}
class Dog (name:String, age:Int) : Animal(name, age, "개"){ // var, val을 쓰지않고 Animal 클래스 생성자에 직접 넘겨준다.
fun bark(){ // Dog만 가능하다.
println("멍멍")
}
}
class Cat(name:String, age:Int) : Animal(name, age, "고양이"){
fun meow(){
println("야옹")
}
}
클래스의 상속은 구조적으로 만들지만 지나친 상속 구조는 코드를 더욱 어렵게 만든다.