728x90
반응형
상속이 필요한 이유
1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때
2. 여러 개의 클래스를 만들었는데 클래스들의 공통점을 뽑아 코드 관리를 편하게 할 때
- 수퍼 클래스: 속성과 함수를 물려줌
- 서브 클래스: 속성과 함수를 물려받음
open: 클래스가 상속될 수 있도록 클래스 선언 시 붙여주는 키워드 (코틀린은 상속 금지가 기본값)
상속의 규칙
- 서브 클래스는 수퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없다. → 클래스의 자체 속성으로 만들어주는 var을 붙이지 말고 일반 파라미터로 받아 수퍼 클래스의 생성자에 직접 넘겨준다.
- 서브 클래스가 생성될 때는 반드시 수퍼클래스의 생성자까지 호출되어야 한다.
fun main(){
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
a.introduce() // 저는 개 별이이고, 5살 입니다.
b.introduce() // 저는 개 별이이고, 5살 입니다.
b.bark() // 멍멍
var c = Cat("루이", 1)
c.introduce() // 저는 고양이 루이이고, 1살 입니다.
c.meow() // 야옹야옹
}
open class Animal(var name:String, var age:Int, var type:String){ // 수퍼 클래스
fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")
// * 클래스 자신의 속성임이 확실할 때는 this를 사용하지 않아도 된다.
}
}
class Dog(name:String, age:Int): Animal(name, age, "개"){ // 서브 클래스
// 추가 함수
fun bark(){
println("멍멍")
}
}
class Cat(name:String, age:Int): Animal(name, age, "고양이"){ // 서브 클래스
// 추가 함수
fun meow(){
println("야옹야옹")
}
}
728x90
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 기본 프로젝트 구조 (0) | 2023.09.05 |
---|---|
[Kotlin] 오버라이딩, 추상화, 인터페이스 (0) | 2023.09.05 |
[Kotlin] 클래스의 생성자 (0) | 2023.09.05 |
[Kotlin] 클래스의 기본 구조 (0) | 2023.09.05 |
[Kotlin] 흐름제어와 논리연산자 (0) | 2023.09.04 |