타닥타닥 개발자의 일상

Kotlin에서의 this, super, 오버로드 overload, 오버라이딩 overriding 예시 알아보기 본문

코딩 기록/Kotlin

Kotlin에서의 this, super, 오버로드 overload, 오버라이딩 overriding 예시 알아보기

NomadHaven 2022. 1. 26. 22:58

 

메인함수

fun main(args: Array<String>) {

    //this와 super, overriding, overload 사용

    val base = Base("길동","홍",24)
    base.firstname = "진호" //firstname 진호로 set.

    println(base.fullName) //  get과 같은 역할,  출력값: 진호 홍

    val child = Child("춘향","성",15, "서울시") //Base 클래스의 자식 클래스인 Child의 생성자
    println(child.lastname) // 출력값 : 성
    println(child.fullName) 
    // 오버라이딩 전 출력값: 춘향 성 , 오버라이딩 후 출력값: 춘향 15 서울시
    }

 

부모 클래스와 자식 클래스

//상속을 해주기 위해 open 붙인다. default parameter 지정.
open class Base(var firstname:String = "길동", val lastname:String = "홍", var age:Int =24){

open val fullName: String //  오버라이딩 위해 open 붙인다. (변수든 클래스든 메소드든 상속 시키려면 open붙인다.)
        get() = "$firstname $lastname"
}

class Child(firstname:String, lastname:String, age:Int, var address:String) : Base(firstname, lastname, age) { //Base를 상속받는 Child클래스

    override val fullName:String
    get()= "$firstname $age $address" //fullName을 오버라이드. lastname 삭제하고 age,address 추가. 

}

 

출력화면


 

 

메인함수

fun main(args: Array<String>) {

    val parrot = Parrot("나이팅게일",2,"blue",7) //Bird 클래스의 자식 클래스인 Parrot의 생성자
    println(parrot.toString()) //출력값: Bird(name='나이팅게일', wing=2, color='blue')Parrot(vol=7)
    println(parrot.allData()) // 출력값 : 나이팅게일 2 blue 7 (vol이 오버라이딩 되었다.)
    }

 

부모클래스와 자식클래스

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 ") //overriding 위해 함수앞에 open 기재
}

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

//Bird 클래스 상속받은 Parrot
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)"
        //부모 클래스의 toString 출력값 + Parrot의 vol 출력
    }

    override fun allData(){ //상속된 함수에 vol이 없는 관계로 vol을 overriding
        super.allData()
        println("$vol") //overriding 된 값
    }

}

 

출력화면

 


메인함수

fun main(args: Array<String>) {
    val cal = Calc() //overload 의 예시
    println( cal.add(3,4))
    println( cal.add(3.4,4.12))
    println( cal.add(3,4,5))
    println( cal.add(3.12,4.44,5.44))

}

생성자가 불러온 클래스

class Calc{

    //overload 함수 명칭은 동일하되 매개변수가 다르다.
    fun add(x:Int, y:Int): Int =x+y //1
    fun add(x:Double, y:Double): Double =x+y //2
    fun add(x:Int, y:Int, z:Int) : Int = x + y + z //3
    fun add(x:Double, y:Double, z:Double) : Double = x + y + z //4
}

 

 

출력화면

 


 

 

 

전체 원본코드

fun main(args: Array<String>) {

    //this와 super, overriding, overload 사용

    val base = Base("길동","홍",24)
    base.firstname = "진호" //firstname 진호로 set.

    println(base.fullName) //  get과 같은 역할,  출력값: 진호 홍

    val child = Child("춘향","성",15, "서울시") //Base 클래스의 자식 클래스인 Child의 생성자
    println(child.lastname) // 출력값 : 성
    println(child.fullName) 
    // 오버라이딩 전 출력값: 춘향 성 , 오버라이딩 후 출력값: 춘향 15 서울시

    val parrot = Parrot("나이팅게일",2,"blue",7) //Bird 클래스의 자식 클래스인 Parrot의 생성자
    println(parrot.toString()) //출력값: Bird(name='나이팅게일', wing=2, color='blue')Parrot(vol=7)
    println(parrot.allData()) // 출력값 : 나이팅게일 2 blue 7 (vol이 오버라이딩 되었다.)

    val cal = Calc() //overload 의 예시
    println( cal.add(3,4))
    println( cal.add(3.4,4.12))
    println( cal.add(3,4,5))
    println( cal.add(3.12,4.44,5.44))

}




class Calc{

    //overload 함수 명칭은 동일하되 매개변수가 다르다.
    fun add(x:Int, y:Int): Int =x+y //1
    fun add(x:Double, y:Double): Double =x+y //2
    fun add(x:Int, y:Int, z:Int) : Int = x + y + z //3
    fun add(x:Double, y:Double, z:Double) : Double = x + y + z //4
}



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 ") //overriding 위해 함수앞에 open 기재
}

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

class Parrot : Bird{ //Bird 클래스 상속받은 Parrot

    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)"
        //부모 클래스의 toString 출력값 + Parrot의 vol 출력
    }

    override fun allData(){ //상속된 함수에 vol이 없는 관계로 vol을 overriding
        super.allData()
        println("$vol") //overriding 된 값
    }

}


//상속을 해주기 위해 open 붙인다. default parameter 지정.
open class Base(var firstname:String = "길동", val lastname:String = "홍", var age:Int =24){

open val fullName: String //  오버라이딩 위해 open 붙인다. (변수든 클래스든 메소드든 상속 시키려면 open붙인다.)
        get() = "$firstname $lastname"
}

class Child(firstname:String, lastname:String, age:Int, var address:String) : Base(firstname, lastname, age) { //Base를 상속받는 Child클래스

    override val fullName:String
    get()= "$firstname $age $address" //fullName을 오버라이드. lastname 삭제하고 age,address 추가. 

}

 

 

 

Comments