상속

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

+ Recent posts