상속(Inheritance)
부모 클래스의 프로퍼티와 메서드를 자식 클래스가 재활용하는 것
- 공통적인 요소가 있다면 부모/자식 클래스를 구분하여 상속 관계를 만들 수 있다.
- 코틀린은 다른 언어들과 달리 생략된 final 키워드를 있기 때문에 기본적으로는 상속이 막혀있다.
- 무분별한 상속으로 예상치 못한 흐름을 방지하기 위해서.
- 다형성을 구현할 수 있다.
- 클래스의 내용을 변경해야할 때 전부 바꿀 필요 없이 부모 클래스만 변경하면 된다.
- open 키워드를 활용해서 상속 관계를 만들 수 있다.
부모 클래스에서 명시적 생산자 활용하지 않는 경우
- 닭, 참새, 비둘기는 새라는 부모에서 출발했다는 관계를 만들어줄 수 있다.
fun main() {
var bird = Bird()
var chicken = Chicken()
var sparrow = Sparrow()
var pigeon = Pigeon()
bird.fly()
chicken.fly()
sparrow.fly()
pigeon.fly()
}
open class Bird {
fun fly() {
println("새는 날아요~")
}
}
class Chicken : Bird() {
}
class Sparrow : Bird() {
}
class Pigeon : Bird() {
}
부모클래스(Bird)에서 생성자를 활용하는 경우
fun main() {
var bird = Bird("새")
var chicken = Chicken("닭")
var sparrow = Sparrow("참새")
var pigeon = Pigeon("비둘기")
bird.fly()
chicken.fly()
sparrow.fly()
pigeon.fly()
}
open class Bird(name:String) {
var name: String = ""
init {
this.name = name
}
fun fly() {
println("${name} 날아요~")
}
}
class Chicken(name: String) : Bird(name) {
}
class Sparrow(name: String) : Bird(name) {
}
class Pigeon(name: String) : Bird(name) {
}
참고자료
https://kotlinlang.org/docs/inheritance.html