테크과학! DiMo
개발 환경: play.kotlinlang.org
상속이 필요한 경우
1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때
2. 여러 개의 클래스를 만들었는데 클래스들의 공통점을 뽑아 코드 관리를 편하게 해야 할 때
수퍼 클래스와 서브 클래스
속성과 함수를 물려주는 클래스를 수퍼 클래스
물려 받는 쪽을 서브 클래스
코틀린에서 상속의 특징.
- 상속 금지가 기본 값 (= 'open' 상태가 아니다)
open은 클래스가 상속될 수 있도록 클래스 선언시 붙여줄 수 있는 키워드.
상속의 두가지 규칙
1. 서브 클래스는 수퍼 클래스에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없음
2. 서브 클래스가 생성될 때는 반드시 수퍼 클래스의 생성자까지 호출해야 함
클래스 상속은 클래스를 더 구조적으로 다룰 수 있게 해준다는 장점이 있지만, 지나친 상속 구조는 코드를
더 어렵게 만든다.
코드 예시
fun main() {
var dog = Animal("별",1,"개")
var dog2 = Dog("별",2)
dog.introduce()
dog2.introduce()
dog2.bark()
var cat = Cat("라옹", 1)
cat.introduce()
cat.meow()
}
open class Animal (var name:String, var age:Int, var type:String) {
fun introduce() {
println("저는 ${type} ${name}이고, ${age}살 입니다.")
}
}
// var, val 등을 붙이면 속성으로 선언되므로 var, val을 붙이지 않는 것이다.(규칙 2번)
// 콜론을 붙이고 수퍼클래스의 생성자를 호출할 수 있도록 한다.
class Dog (name:String, age:Int) : Animal(name, age, "개") // 중괄호 생략해도 선언은 가능하다.
{
fun bark() {
println("멍멍")
}
}
class Cat (name:String, age:Int) : Animal (name, age, "고양이") {
fun meow() {
println("야옹")
}
}
출력:
저는 개 별이고, 1살 입니다.
저는 개 별이고, 2살 입니다.
멍멍
저는 고양이 라옹이고, 1살 입니다.
야옹
'Kotlin > 기본 문법' 카테고리의 다른 글
코틀린 강좌 #11 기본 프로젝트 구조 (0) | 2020.12.17 |
---|---|
코틀린 강좌 #10 오버라이딩과 추상화 (0) | 2020.12.17 |
코틀린 강좌 #8 클래스의 생성자 (0) | 2020.12.17 |
코틀린 강좌 #7 클래스의 기본 구조 (0) | 2020.12.17 |
코틀린 강좌 #6 흐름제어와 논리연산자 (0) | 2020.12.12 |