[kotlin] Class 상속

2018. 6. 15. 22:20kotlin-이론

Class 상속



클래스는 다른 클래스를 상속하거나 상속 되어질 수 있다. 코틀린에서 클래스는 기본적으로 Any라는 최상위 클래스를 상속하고 있다. 하지만 명시적으로 생략가능하다. 

기초적인 상속
 
class Example1 //암시적으로 Any 상속 
class Example2:Any()//명시적으로 Any 상속

Any 함수는 세개의 함수 equals, hashCode, toString등 으로 이루어져있다. 


상속 방법 

open을 통해서 상속 가능하게 한다. 

open class AA{ //모든 클래스는 원래 final형태이지만 open을 통해 바꾸어 주어야한다. 

}

class BB:AA(){

}

파생클래스에 기본 생성자가 없으면 각각의 보조 생성자에서 사위타입을 super 키워드를 이용해서 초기화 해주어야 한다.  또는 다른 생성자에 위임해주어야한다. 

class bb : aa//기본 생성자가 없다 { constructor():super() constructor(cnt:Int):this() constructor(ctx:Int, attrs:Int):super() }




메소드 오버라이딩 


오버라이딩 되어질 함수에 클래스와 같이 open을 붙여주고 사용될 곳에서는 override를 붙여주면 된다. 


-오버라이딩 될 함수 oepn


-오버라이딩 된 함수 override 



fun main(args:Array){
    var test = AA()
    test.whatUInfo()
}

open class BB{
    var name:String = ""
    var age:Int = 0
    constructor(name:String, age:Int){
        this.name = name
        this.age = age
    }
    open fun whatUInfo(){
        println(this.name+this.age)
    }
}

class AA:BB("이상훈", 22){
    override fun whatUInfo() {
        super.whatUInfo()
        println("너의 이름은 "+name)
        println("너의 나이는 "+age)
    }
}

상속 받은 클래스 AA는 BB를 상속받아 BB의 whatUInfo의 기능을 그대로 이어받고 원래의 함수에 기능을 더 추가해서 사용할 수 있다. 



프로퍼티 오버라이딩 


클래스 오버라이딩과 같이 open과 override를 통해 사용할 수 있다.




오버라이딩 규칙 


package `class`

fun main(args:Array){
var C = C()
    C.f()
}

open class A{
    open fun f(){
        println("AAAAAAAAfffffffff")
    }
}

interface B{
    fun f(){
        println("BBBBBBBBFFFFFFFF")
    }
}

class C():A(), B{
    override fun f() {
        super<A>.f()
        super<B>.f()
    }
}

위 코드와 같이 작성해주면 class와 interface에 이름이 같은 함수가 존재할 때 특이한 방법으로 해결할 수 있다. 


추상 클래스 


abstract class AbsClass{ abstract fun f() } class MyClass:AbsClass(){ override fun f() { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } }

추상 클래스는 몸체가 없는 클래스이다. 따라서 상속받는 클래스에서 이함수를 구현을 해야한다. 

open이 필요없다. 

'kotlin-이론' 카테고리의 다른 글

[kotlin] kotlin 강의 properties2  (0) 2018.06.17
[kotlin] kotlin 강의 properties1  (0) 2018.06.16
[kotlin]Class  (0) 2018.06.15
[kotlin]Return and Jumps (break 문, continue 문, return 문)  (0) 2018.06.15
[kotlin]코틀린 controlFlow  (0) 2018.06.15