클래스의 상속
부모 클래스는 open 키워드로 만들어야만 상속 가능하다.
상속할 부모클래스는 콜론(:)을 이용
상속은 부모의 인스턴스를 자식이 갖는 과정이기 때문에 부모 클래스명 다음에 괄호를 입력해 꼭 부모 클래스의 생성자를 호출해야한다.
open class Parents{
~~
}
class Child:Parents(){
~~
}
생성자 파라미터가 있는 클래스 상속
자식 클래스의 생성자를 통해 부모클래스의 파라미터에 전달됨
open class Parents(vlaue:String){
~~
}
class Child(value:String):Parents(value){
~~
}
**부모 클래스에 세컨더리 생성자가 있으면 자식 클래스의 세컨더리 생성자에 super 키워드로 부모 클래스에 전달.
super는 부모클래스를 지칭함
상속하는 부모클래스명 뒤에 괄호는 생략해준다
open class Parents{
constructor(value:String){}
}
class Child:Parents{//괄호를 생략해준다.
constructor(value:String):super(value)
}
오버라이드
상속받은 부모 클래스의 멤버 변수, 멤버 함수를 자식 클래스에서 다른 용도로 사용하기 위해서는 오버라이드가 필요.
override키워드로 재정의 할 수 있다.
오버라이드 할 때는 멤버 변수, 멤버 함수앞에 open키워드가 붙어있어야함
open class Parents{
open var openedVal: String="yellow"
open fun opened(){}
}
class Child:Parents(){
override var openedVal:String="red"//멤버 변수 오버라이드
override fun opened(){}//멤버 함수 오버라이드
}
익스텐션(확장)
미리 만들어져 있는 클래스에 메서드를 넣는 개념.
class Students{
fun name()
fun order()
}
fun Studens.grade(){//student클래스에 grade함수를 추가로 넣고싶을때 사용.
}
??? 잘 이해가 안간다.
실제 클래스가 변경되는것이 아님.
댓글