| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- for문
- 맥북M1
- 안드로이드 스튜디오
- 반복문
- typeAlias
- Kapt
- 인텔리제이
- 널 안전성
- 초기화 미루기
- 스프링부트2.7.9
- dbms
- 통합개발환경
- 스프링부트 버전
- 로그캣
- 코틀린
- 컴패니언
- 엘비스
- when문법
- 람다함수
- 타입별칭
- MySQL
- Until
- 오브젝트
- 버전의 중요성
- while문
- lateinit
- 오버라이드
- do while문
- downto
- 접근제한자
- Today
- Total
좌충우돌 코딩
코틀린 - 상속 본문
코틀린 공부를 하면서 들었던 말 중에 특이한 말이 있습니다.
- "여러분들~~~ 코틀린에서의 클래스는 기본적으로 상속이 금지되어있습니다!!!"
- "네에????"
네 그렇습니다. 독립심을 팍팍 키워주는 스파르타식 코틀린입니다.
나의 재산을 자녀에게 넘겨주지 않고 사회에 환원하겠다!!
기본적으로 안 되는 것이지.. 상속을 못 받지는 않습니다.
접근제한자 키워드에서도 protected가 있잖아요?!
상속을 받기 위해서는 부모클래스 앞에 open이라는 키워드를 사용해야지만 상속을 받을 수 있습니다.
사회로 치면 변호사에게 상속하겠다는 공증 느낌이랄까요??
코드를 봅시다~
open class Parent {
// 코드
}
class Child: Parent() {
// 코드
}
상속할 클래스는 클래스 앞에 open 키워드를 사용하고 상속 받는 클래스는 클래스 이름 뒤에 콜론(:)뒤에 상속할 클래스를
적어주면 상속을 받게 됩니다.
만일 상속받을 클래스에 생성자가 있다면 파라미터를 넘겨줄 수 있습니다.
open class Parent(age: Int) {
// 코드
}
class Child(name: String, age: Int): Parent(age) {
// 코드
}
자식클래스에 파라미터 age를 부모클래스에 전달해주는 개념입니다.
open class Parent {
var hello:String = "안녕하세요"
fun sayHello() {
println("${hello}!! 여긴 Parent 클래스입니다.")
}
}
class Child: Parent() {
}
fun main() {
val child = Child()
child.sayHello() // 안녕하세요!! 여긴 Parent 클래스입니다. 출력됨
}
자식클래스는 아무것도 없는데, 자식클래스에서 존재하지 않는 sayHello를 호출했고
콘솔을 보니 "안녕하세요!! 여긴 Parent 클래스입니다."가 출력되는 것을 확인할 수 있습니다.
부모클래스에서 상속을 받았기 때문에 가능한 일이죠.
상속하면 빠질 수 없는 오버라이딩를 확인해볼까요?
open class Parent {
open var age: Int = 30
open fun people() {
println("나는 부모 클래스, 나이는 $age")
}
}
class Child: Parent() {
override var age: Int = 20
override fun people() {
rintln("나는 자식 클래스, 나이는 $age")
}
}
fun main() {
val child = Child()
child.people() // 나는 자식 클래스, 나이는 20 출력됨
}
오버라이딩을 하기 위해서는 상속과 동일하게 open키워드를 사용해야합니다.
부모클래스에 함수 앞에 open 키워드가 사용된 것이 보이죠?
super라는 키워드로 부모클래스에 변수 및 함수를 호출할 수 있습니다.
부모클래스에서 나이는 30인데 자식클래스에서 age를 변경했고 결과를 보면 잘 수정이 되었습니다.
그럼 이만~~
'코틀린 > 순수 코틀린' 카테고리의 다른 글
| 코틀린 - 널(null) (0) | 2023.03.29 |
|---|---|
| 코틀린 - 다양한 클래스 (0) | 2023.03.27 |
| 코틀린 - 접근제한자 (0) | 2023.03.25 |
| 코틀린 - 클래스(class) (0) | 2023.03.24 |
| 코틀린 - 함수(funcation) (0) | 2023.03.23 |