YSHUSH

상속 본문

Coding/Kotlin

상속

코딩; 2022. 1. 27. 03:44

 

예제1

Base class

open class Base(var firstname:String = "코니", val lastName:String = "김", var age:Int){
/*
class Base{
    var firstname:String
    val lastName:String
    var age:Int

    constructor(firstname:String, lastName:String, age:Int){
        this.firstname = firstname
        this.lastName = lastName
        this.age = age
    }
*/

    open val fullName:String
        get() = "$firstname $lastName"

}

주석처리된 부분이 축약되어 Base class의 생성자로 들어가면 이런 형태로 된다.

Child class가 상속을 받기 때문에 앞에 open을 붙여주는 것 잊지말도록 하자.

 

Base class를 상속받는 Child class

class Child(firstname:String, lastName:String, age:Int, var address:String) : Base(firstname, lastName, age){

    override val fullName: String
        get() = "$firstname $age $address"
}

코틀린에서 특이한 점은 상속시 클래스건 메소드건 상속받는 개체 앞에다 오버라이드를 붙여줘야 한다,

그리고 상속을 주는 개체 앞에 open을 붙여준다.

 

상속 적는 단계

먼저 이렇게 적어주고

class Child : Base(firstname, lastName, age)

이렇게 추가해준다

class Child(firstname:String, lastName:String, age:Int) : Base(firstname, lastName, age)

 

함수호출부

fun main(args: Array<String>) {

    val base = Base("코돌", "양", 24)
    base.firstname = "영춘"

    println(base.fullName)  // get

    val child = Child("코스", "임", 38, "서울시")
    println(child.lastName)
    println(child.fullName)
}

 

예제2

Bird class

open class Bird(var name:String, var wing:Int, var color:String){

    fun fly() = println("Fly wing: $wing")

    override fun toString(): String {
        return "Bird(name='$name', wing=$wing, color='$color')"
    }
    open fun allData() = print("$name $wing $color ")
}

Lark class

class Lark(name:String, wing:Int, color:String):Bird(name, wing, color){
    fun singHitOne() = println("짹짹!")
}

Parrot class

class Parrot:Bird{

    var vol:Int = 0

    constructor(name:String, wing:Int, color:String, vol:Int):super(name, wing, color) {
        this.vol = vol
    }

    override fun toString(): String {
        return super.toString() + "Parrot(vol=$vol)"
    }

    override fun allData(){
        super.allData()
        println("$vol")
    }
}

super → 상속받은 클래스의 데이터를 가져온다.

 

함수호출부

fun main(args: Array<String>) {

    val parrot = Parrot("나이팅게일", 2, "blue", 8)
    println(parrot.toString())
    println(parrot.allData())

}

 

오버라이드 연습

// 오버라이드
class Calc{

    fun add(x:Int, y:Int):Int = x + y
    fun add(x:Double, y:Double):Double = x + y
    fun add(x:Int, y:Int, z:Int):Int = x + y + z
    fun add(x:Double, y:Double, z:Double):Double = x + y + z

}
fun main(args: Array<String>) {

    val cal = Calc()
    println(cal.add(3, 4))
    println(cal.add(3.12, 4.34))
    println(cal.add(3, 4, 5))
    println(cal.add(3.12, 4.34, 5.67))

}

 

 

'Coding > Kotlin' 카테고리의 다른 글

Interface  (0) 2022.01.27
추상클래스(abstract class)  (0) 2022.01.27
가위바위보 게임  (0) 2022.01.26
Lazy  (0) 2022.01.26
Getter & Setter  (0) 2022.01.26