-
Notifications
You must be signed in to change notification settings - Fork 8
11. 다형성(오버로딩, 오버라이딩)
VintageAppMaker edited this page Jan 8, 2019
·
10 revisions
Kotlin에서 오버로딩과 오버라이딩은 다음과 같다
- 선조 클래스에서 메소드와 필드를 open으로 정의한다.
- 상속받은 클래스에서 override로 정의한다.
- 오버로딩은 자바와 같다. 같은 이름의 다른 파라메터를 받는 메소드를 정의하면 된다.
-
소스코드
fun main (args : Array <String>){ var obj1 = baseClass() obj1.f1() var obj2 = childClass() obj2.f1() obj2.f2() obj2.f2("문자열 파라메터") obj2.f2("문자열 파라메터", 100) } // 간단한 클래스 open class baseClass{ // 상속받은 클래스에서 override 하려면 부모클래스에서 open으로 정의. open var name = "base" open fun f1() = println(this.toString()) // 외부사용금지 .찍고 메소드 사용못함. private fun onlyMyFunc() = println("클래스내부에서만 사용") constructor(){ onlyMyFunc() } } class childClass : baseClass(){ override var name = "" override fun f1() = println(this.toString() + " 재정의함.") fun f2() = println("f2") // overloding fun f2(s : String ) = println("f2:$s ") fun f2(s : String, num : Int ) = println("f2: $s, $num ") }
-
디버깅 & 설명
-
왜 사용하는가?
kotlin은 자바와 달리 연산자 오버로딩을 지원한다. (operator로 정의. 이미 정의된 함수 오버로딩. plus, inc, dec, ...)
fun main(args : Array<String>){
var s = Student("박모씨")
(0..99).forEach {s++}
s.printMe()
var s2 = Student("김모씨")
s2.nScore = 50
println ( "두 학생의 점수는 ${s + s2}" )
}
class Student(s : String ){
var name : String = s
var nScore : Int = 0
operator fun plus( student : Student) : Int {
return student.nScore + this.nScore
}
// ++ 변화된 객체를 넘겨야함.
operator fun inc() : Student{
this.nScore++
return this
}
fun printMe () = println ("${name}는 점수가 $nScore")
}
-
Android Studio에 적용하기
-
말실수
동영상에서 말실수
- redeclation error인데 계속 redifine error라고 말하고 있음