[Kotlin] 10. 클래스의 상속
상속은 왜 필요할까?
1. 이미 존재하는 클래스를 확장
2. 여러개의 클래스들의 공통점을 뽑아 코드관리를 편하게
두 관점에서 코틀린의 상속에 대해서 알아보자.
1. 상속(inheritance)
- 상속하는 쪽은 수퍼클래스, 상속 받는 쪽을 서브클래스라고 한다.
- 코틀린은 상속 금지가 기본 형태이다.
- open 상태가 상속 가능 상태로 클래스 선언시 붙일 수 있는 키워드이다.
- 수퍼 클래스 쪽에 붙인다.
1-1. 상속 규칙
- 서브 클래스는 수퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없다.
- 서브 클래스 생성자 호출 시 반드시 수퍼클래스 생성자가 먼저 호출된다.
- 서브 클래스는 파라미터를 받을 때 var, val을 붙이지말고 일반 파라미터로 받는다.
- var, val을 붙이면 속성으로 선언된다.
- 일반 파라미터로 받은 값들을 수퍼 클래스 생성자에 직접 넘겨준다.
- 서브 클래스() : 수퍼 클래스() 방식으로 상속받는다. (수퍼 클래스의 생성자를 호출한다.)
예시.
Animal 클래스를 상속받은 서브 클래스(Dog, Cat)을 선언하고 각 클래스만의 함수를 선언해주자.
fun main() {
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
var c = Cat("루어", 1)
a.introduce()
b.introduce()
b.bark()
c.meow()
}
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, "개"){ // var, val을 쓰지않고 Animal 클래스 생성자에 직접 넘겨준다.
fun bark(){ // Dog만 가능하다.
println("멍멍")
}
}
class Cat(name:String, age:Int) : Animal(name, age, "고양이"){
fun meow(){
println("야옹")
}
}
클래스의 상속은 구조적으로 만들지만 지나친 상속 구조는 코드를 더욱 어렵게 만든다.
Author And Source
이 문제에 관하여([Kotlin] 10. 클래스의 상속), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ohdowon064/Kotlin-10.-클래스의-상속저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)