한 걸음 두 걸음

Kotiln 08 ] 상속 본문

Language/Kotlin

Kotiln 08 ] 상속

언제나 변함없이 2019. 5. 20. 09:38
반응형

상속

class 이름 :상속할거(){}
방식으로 사용합니다. :만 써줌으로써 할 수 있고, 아무것도 안쓸경우 Any가 상속됩니다.

open class AA{x : Int}  //open 키워드를 써줌으로써 상속해줄 수 있는 클래스가 됩니다.
class BB(x:Int) : AA(x){}

기본적으로 코틀린의 모든 클래스는 final로 만들어지기때문에 open으로 사용해주어야합니다.

파생 클래스에 기본생성자가 없는 경우에는 super키워드를 사용하여 상속클래스의 생성자를 초기화시켜주어야합니다.

class MyView : View{
    constructor() : super(1) 
    //매개변수가 없는 보조생성자
    constructor(a : Int) this() 
    //인트형 a를 하나 받는 보조생성자는 this(매개변수가 없는 보조생성자)를 호출하여 super를 처리합니다.
}

메소드 오버라이딩

open class AA (x : Int){
    open fun a(){} //함수도 open해주어야 파생클래스에서 override를 해줄 수 있습니다.
}

class BB () : AA(){
    override fun a(){}
}

이는 함수 뿐만아니라 변수도 동일하게 작용합니다.

클래스나 인터페이스 상속 규칙

open class A{}
interface B {}

class c() : A(), B{ 
}

상속은 클래스의 경우 하나만 가능하고 인터페이스는 여러개 가능한 것은 자바와 동일합니다.
단, 코틀린의 인터페이스는 자바와 모양이 조금 다른데,

interface B {
    fun f() { print("b" } 
}

처럼 인터페이스 내부 함수에 body까지 작성해주어야합니다.
이 때 자식객체에서는 super<클래스명>을 통해 상위클래스나 인터페이스를 호출할 수 있습니다.

open class A {
    open fun f(){ print("a") }
}
interface B {
    fun f() { print("B") }
}

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

추상클래스

abstract class 이름{
    abstract 함수() //구현이 필요없음
}

이는 open을 안해줘서 가져다가 쓸 수 있습니다.

반응형