카테고리 없음

코틀린(상속과 오버라이딩)

sangwoon 2022. 6. 24. 11:42

상속이란?

클래스를 선언할 때 다른 클래스를 참조해서 선언하는 것을 상속이라고 한다.

open class Super{ //상위 클래스
}
class Sub:Super(){ //하위 클래스
}

상위 클래스를 지정하려면 class 앞에 open을 써줘야한다.

그리고 상위 클래스를 상속받은 하위 클래스의 생성자에서는 상위 클래스생성자를 호출해야한다.

호출한다는 개념이기에 하위에 생성자를 생성할 필요는 없다(호출하고 파라미터로 받아주기만 하면된다). 

 

실습)

 

1. 매개변수가 있는 상위 클래스의 생성자 호출

open class Super(name: String){
	val name: String
    init {
    	this.name = name
    }
    fun print(){
    	println("$name")
    }
}

class Sub(name: String): Super(name){
}

fun main(){
	val user1 = Sub("limsangwoon")
    user1.println()
}

상속 받을 때는 :Super 하고 ()  안에 name 이라는 상위 클래스의 생성자를 받을 수 있다. 그리고 하위 생성자도 상위에 

생성자를 가져왔으면 자신의 주 생성자의 파라미터에 같은 type을 가진 매개변수를 생성해줘야한다.

 

2. 하위 클래스에 보조 생성자만 있을 경우 상위 클래스의 생성자 호출

open class Super(name:String){
}
class Sub:Super{
	constructor(name:String): Super(name){
    }
}

 

이렇게 상속을 하면 하위 클래스가 상위 클래스의 변수 함수들을 사용할 수 있다. 

오버라이딩이란?

상위 클래스에 선언된 변수나 함수를 같은 이름으로 하위 클래스에서 다시 선언하는 것을 오버라이딩이라고 한다.

 

예)

open class Super{
	open var someData = 10
    open fun someFun(){
    	println("Super class variable $someData")
    }
}

class Sub:Super(){
	override var someData = 20
    override fun someFun(){
    	println("Sub good $someData")
    }
}

상위 클래스는 override를 해주기 위해 함수나 변수 앞에 open을 붙여줘야한다.

 

그리고 하위 변수는 override를 해주기 위해 override 를 붙여줘야한다.