상속은 클래스를 선언할 때 다른 클래스를 참조해서 선언하는 것이다. 즉, 간단하게 말하면 클래스를 확장하는 개념이다.
따라서 상속 관계에서 상속 대상이 되는 클래스를 상위 클래스라고 하고, 상속 받는 클래스를 하위 클래스라고 한다.
open
키워드 사용open class Super { // 상속할 수 있게 open 키워드 사용
}
class Sub: Super() { // Super를 상속받아 Sub 클래스 선언
}
open class Super(name: String) {
}
class Sub(name: Stirng): Super(name) {
}
open class Super(name: String) {
}
class Sub: Super {
constructor(name: String): super(name) {
}
}
상위 클래스에 선언된 변수나 함수를 같은 이름으로 하위 클래스에서 다시 선언하는 것을 오버라이딩이라고 한다.
open class Super {
var superData = 10
fun superFun() {
println("superData값: $superData")
}
}
class Sub: Super() // 별도의 멤버를 선언하지 않고, Super 클래스를 상속받음.
fun main() {
val obj = Sub()
obj.superData = 20
obj.superFun()
}
변수도 오버라이딩 기법으로 재정의할 수 있지만 주로 함수를 재정의하는데 사용한다.
예를 들면, 상위 클래스인 Animal
이 있고 Animal
클래스에는 cry()
라는 함수가 있다고 가정해보자.
이때 이를 상속받는 Dog
클래스와 Cat
클래스에서 cry()
라는 함수를 재정의(오버라이딩)하여 울음소리를 다르게 할 수 있다.
함수뿐만 아니라 변수도 open
키워드와 override
키워드를 사용해야 한다.
open class Animal(var name: String, var age: Int){
open fun cry() { // 상속 허용하도록 open 키워드 사용
println("울음 소리")
}
}
class Dog(name: String, age: Int): Animal(name, age){
override fun cry(){ // 재정의하도록 override 키워도 사용
println("왈왈")
}
}
class Cat(name: String, age: Int): Animal(name, age){
override fun cry(){ // 재정의하도록 override 키워도 사용
println("냐옹")
}
}
Reference
Book: 깡샘의 안드로이드 프로그래밍 with 코틀린