Android

[Kotlin] 코틀린 - 상속

귀뚜래미 2024. 8. 2. 11:11
728x90

상속

- 클래스를 선언할 때 다른 클래스를 참조해서 선언하는 것

- 다른 클래스에서 상속할 수 있게 선언하려면 open 키워드를 사용한다.

- 하위 클래스에서 상속을 받으려면 클래스명 옆에 콜론(:)을 넣고 오른쪽에 상위 클래스명을 입력한다.

open class Parent{	// 하위클래스에서 상속받을 수 있도록 open 키워드 사용
	// 상위 클래스
}

class Child: Parent(){	// 상위클래스 Parent를 상속
	// 하위 클래스
}

 

- 매개변수가 있는 상위클래스를 상속받는 경우 하위클래스에서도 매개변수 형태에 맞게 전달해야한다

open class Parent(name: String){
}

class Child_First(name: String): Parent(name){
    // 하위클래스를 선언하며 상위클래스 생성자 호출
}

class Child2_Second: Parent{
    // 하위클래스에 보조 생성자를 통해 상위클래스 생성자 호출
    constructor(name: String): super(name){
    }
}

 

 

 

overriding(오버라이딩), 재정의

- 상위클래스에 선언된 변수나 함수를 같은 이름으로 하위클래스에서 다시 선언

- 변수, 함수 모두 override 키워드를 사용해 재정의가 가능하다

- 상위 클래스의 함수가 수행하는 로직을 그대로 이용하거나 추가적인 로직이 필요한 경우 사용

- 오버라이딩을 허용할 함수나 변수 앞에 open 키워드를 넣어야 하위클래스에서 재정의가 가능하다

open class Parent{
    // open 키워드로 하위클래스에서 오버라이딩이 가능한 상태로 만듦
    open var data = 10
    open fun parentCall(){
        println("parentCall : $data")
    }
}

class Child: Parent(){
    // override 키워드로 Parent 클래스의 변수와 함수를 재정의
    override var data = 50
    override fun parentCall() {
        println("parentCall override in Child class : $data")
    }
}

fun main(){
    val obj = Child()
    obj.parentCall()    //parentCall override in Child class : 50
}

 

 

Kotlin 접근 제한자

public

- 접근 제한이 없어 원하는 곳 어디서든 접근할 수 있다. 접근제한자를 생략할 경우 C#과 다르게 기본값은 public이다.

internal

- Grable, Maven 등 같은 빌드나 프로젝트 단위와 같이 같은 모듈 내에서 접근이 가능하다.

protected

- 클래스의 멤버에서만 선언할 수 있기 때문에 최상위의 변수, 함수에서는 해당 키워드를 사용할 수 없다,

- protected 클래스의 멤버는 하위클래스에서도 접근할 수 있다.

private

- 해당 클래스 안에서만 접근할 수 있고, 최상위에서 선언하면 해당 파일 내부에서만 접근할 수 있다.

728x90