본문 바로가기
Do it 코틀린 프로그래밍

코틀린 상속과 다형성

by 차누감 2020. 8. 19.
반응형

상속 : 상위 클래스의 속성과 기능을 물려받아 계승하는 것

다형성 : 메서드가 같은 이름을 사용하지만 구현 내용이 다르거나 매개변수가 달라서 하나의 이르믕로 다양한 기능을 수수행하는 개념

 

코틀린은 클래스를 상속해 주려면 open 이라는 키워드와 함께 클래스를 선언해야 합니다.

 

하위 클래스 선언하기

open class 기반 클래스 이름 {	//	묵시적으로 Any로부터 상속됨, oepn으로 파생 가능

}

class 파생 클래스 이름() : 기반 클래스 이름{	//	기반 클래스로부터 상속됨, 최종 클래스로 파생 불가

}

상속 및 하위 클래스 선언 예)

//  상속 가능한 클래스를 선언하기 위해 open 사용
open class Bird(var name:String, var wing:Int, var beak:String, var color:String){   //  constructor 생략
    // 프로퍼티는 매개변수 안에 var를 사용해 프로퍼티로서 선언되어 본문에서 생략됨
    fun fly() = println("Fly wing : $wing")
    fun sing(vol:Int) = println("Sing : $vol")
}

class Lark(name:String, wing:Int, beak:String, color:String) : Bird(name, wing, beak, color){
    fun singHitone()= println("Happy Song!")
}
class Parrot : Bird{
    val language:String
    constructor(name:String, wing:Int, beak: String,color: String, language:String) : super(name, wing, beak, color){this.language=language}
    fun speak()= println("Speak! $language")
}

fun main(){
    val coco= Bird("mybird",2,"short","blue")
    val lark=Lark("mylark",3,"long","brown")
    val parrot=Parrot("myparrot",4,"short","multiple","korean") // 프로퍼티 추가

    println("coco : ${coco.name}, ${coco.wing}, ${coco.beak}, ${coco.color}")
    //  coco : mybird, 2, short, blue
    println("lark : ${lark.name}, ${lark.wing}, ${lark.beak}, ${lark.color}")
    //  lark : mylark, 3, long, brown
    println("parrot : ${parrot.name}, ${parrot.wing}, ${parrot.beak}, ${parrot.color}, ${parrot.language}")
    //  parrot : myparrot, 4, short, multiple, korean

    lark.singHitone()   //  Happy Song!
    parrot.speak()  //  Speak! korean
    lark.fly()  //  Fly wing : 3
}

 

다형성 (오버로딩, 오버라이딩)

오버로딩 : 동작은 동일하지만 인자의 형식만 달라지는 것

예) print(123) , print("Hello")

fun main(){
    val cal = Cal()
    println(cal.add(1,2))   //  3
    println(cal.add(1.2,2.3))   //  3.5
    println(cal.add(1,2,3)) //  6
    println(cal.add("Hello","World!!")) //  HelloWorld!!
}
class Cal{
    //  다양한 매개변수로 오버로딩된 메서드
    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:String, y:String):String=x+y
}

오버라이딩 : 이름은 같지만 기존의 동작을 다른 동작으로 재정의하는 것

open class Bird{	//	open은 상속 가능을 나타냄
	fun fly(){...}	//	최종 메서드로 오버라이딩 불가
    open fun sing(){...}	//	하위 클래스에서 오버라이딩 가능
}

class Lark : Brid(){	//	하위 클래스
	override fun sing(){ /*구현부 새롭게 재정의*/}
}

 

반응형

'Do it 코틀린 프로그래밍' 카테고리의 다른 글

코틀린 배열  (0) 2020.08.21
코틀린 제네릭  (0) 2020.08.20
코틀린 클래스와 객체의 정의  (0) 2020.08.18
코틀린 흐름 중단과 변환  (7) 2020.05.23
코틀린 반복문( for, while, do while )  (0) 2020.05.22

댓글