상속
1.자바의 상속
- 객체지향 핵심 원칙 중 하나인 상속은 상속을 통해 기존 코드를 재사용하거나 확장할 수 있다.
- 자바는 기본적으로 모든 클래스가 상속이 가능하나 상속에 따른 부작용이 발생할 경우를 대비해 final 키워드로 막을 수 있다.
- 대표적으로 System 클래스
자바의 모든 클래스의 조상은 Object인데, 코틀린의 모든 클래스의 조상은 "Any"이다.
Any는 equals,hashCode,toString 함수를 제공한다.
코틀린에서 작성하는 어떤 클래스든지 다 이런 함수들을 상속 받는다.
또한 코틀린의 클래스는 자바와 다르게 기본적으로 final class이다. final이기에 기본적으로 상속을 막고, 필요한 경우 open이라는 키워드를 통해 상속을 허용 가능하다.
open class Dog {
open var age: Int = 0
open fun bark() {
println("멍멍")
}
}
// : 뒤에 상위 클래스를 선언 하면 상속 코드 작성 가능하다.
open class Bulldog(overrid var age : Int = 0) : Dog() {
//하위클래스에서 상위클래스 age,bark 메서드를 재정의 하려면
overrid fun bark() { //overrid된 프로퍼티나,함수는 자동으로 open이 된다.
//println("컹컹")
super.bark() //상위 클래스의 함수나 프로퍼티들을 그대로 재사용할 수 있다.
}
}
abstract class Developer {
abstract var age: Int
abstract fun code(language: String)
}
//Developer 추상클래스를 상속받은 BackendDeveloper를 만들었다.
//이때, 하위클래스에서 구현해야하는 프로퍼티나 함수또한 abstarc함수를 사용하면 된다.
class BackendDeveloper(override var age : Int = 0) : Developer() {
override fun code(language: String) {
println("I code with $language")
}
}
fun main() {
val backendDeveloper = BackendDeveloper(age = 20)
println(backendDeveloper.age)//20
backendDeveloper.code("Kotlin")//I code with Kotlin
//val dog = Bulldog(age = 2)
//println(dog.age)//2
//dog.bark()//멍멍
}
class ChildBulldog : Bulldog () {
overrid var age: Int = 0
overrid fun bark() {
super.bark()
}
}
출처 : FastCampus
'Kotlin' 카테고리의 다른 글
Kotlin 09.인터페이스 (0) | 2023.04.02 |
---|---|
Kotlin.07 자바와 코틀린의 차이점 (0) | 2023.04.02 |
Kotlin.06 클래스와 프로퍼티 (0) | 2023.04.02 |
Kotlin 05.예외처리 (0) | 2023.04.02 |
Kotlin 04. 널 참조 (0) | 2023.04.02 |