클래스
상속
상속이 필요한 경우
- 이미 존재하는 클래스를 확장하여 새로운 클래스를 만들 때
- 여러 개의 클래스들의 공통점을 뽑아 코드 관리를 편하게 해야 할 때
기본 형태
- 키워드 open 사용 (kotln은 상속 금지가 기본값이므로 open을 선언해야 상속이 가능하다.)
- open class 슈퍼클래스(속성) {}
- class 서브클래스(속성): 슈퍼클래스(속성초기화) {}
규칙
- 서브 클래스는 수퍼 클래스에 존재하는 속성과 ‘같은 이름’의 속성을 가질 수 없다.
- 서브 클래스가 생성될 때는 반드시 수퍼 클래스의 생성자까지 호출되어야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
open class Animal (var name:String, var age:Int, var type:String){
fun introduce(){
println("종류는 ${type}, 이름은 ${name}, 나이는 ${age}살 입니다.")
}
}
class Dog(name: String, age: Int): Animal(name, age, "강아지"){
// class의 자체 속성으로 만들어주는 var을 붙이지 말고 (var, val등을 붙이면 속성으로 선언됨)
// 일반 parameter로 받아 Animal 클래스의 생성자에 직접 넘겨준다.
fun bark(){
println("왈왈")
}
}
fun main(){
var dog1 = Animal("멍멍", 2, "강아지")
var dog2 = Dog("짱구", 3)
//dog1=dog2
a.introduce()
b.introduce()
b.bark()
}