728x90
반응형
안녕하세요, 이번 포스팅은 코틀린 상속에 대해 다뤄보고자 합니다.
자바에서 상속을 다룬 적이 있는데요,
개념 관련해서는 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것을 유연하게 해주는 것.
이라고 정의할 수 있겠네요.
어쨌든 상속을 사용하는 이유는 중복되는 코드를 줄이고자 하는 것이지요
open class Car100() {
open fun drive() : String {
return "달린다"
}
open fun stop() {
}
}
class SuperCar100() : Car100() {
override fun drive() : String {
val run = super.drive()
return "빨리 $run"
}
}
class Bus100() : Car100() {
}
여기서 class 앞에 open이 있는 Car100 클래스는 클래스의 기본적인 디폴트 타입이 private입니다.
open으로 명시해주지 않으면 private형으로 되는 것이지요.
자바에서는 public인데, 코틀린에서는 open인것 같습니다.
fun main(args : Array<String>) {
val superCar100 : SuperCar100 = SuperCar100()
println(superCar100.drive())
superCar100.stop()
val bus100 : Bus100 = Bus100()
println(bus100.drive())
}
이것의 실행 결과를 보면
빨리 달린다
달린다
가 출력되게 됩니다.
Car100 클래스를 상속받은 버스와 슈퍼카는 상속받음으로 인해 코드의 길이가 확 줄었습니다.
상속을 응용해보도록 하겠습니다.
fun main(args: Array<String>) {
val monster = SuperMonster(100, 10)
val night = SuperNight(130, 8)
monster.attack(night)
monster.bite(night)
}
// 상속이 만들어낸 특징
// - 자식 클래스는 부모 클래스의 타입이다.
// - 부모 클래스는 자식 클래스의 타입이 아니다!
open class Charactor(var hp : Int, var power : Int) {
fun attack(charactor: Charactor , power : Int = this.power) {
charactor.defense(power)
}
open fun defense(damage : Int) {
hp -= damage
if(hp > 0) println("${javaClass.simpleName}의 남은 체력 $hp 입니다")
else println("사망 했습니다.")
}
}
// 자식 클래스가 인스턴스화 되기 이ㅟ해서 부모 클래스 선행되서 인스턴스화 되어야 한다.
class SuperMonster(hp : Int, power : Int) : Charactor(hp, power) {
fun bite(charactor: Charactor) {
super.attack(charactor, power + 2)
}
}
class SuperNight(hp : Int, power : Int) : Charactor(hp, power) {
val defensePower = 2
override fun defense(damage: Int) {
super.defense(damage - defensePower)
}
}
함수 앞에도 기본적으로 private이 디폴트로 붙습니다.
open을 사용하여 사용할수 있습니다.
상속받은 클래스는 override를 사용하여 함수를 재정의할 수 있습니다.
super는 상속을 해주는 클래스를 의미합니다.
super를 사용하여 좀 더 간단한 코드를 구현할 수 있습니다.
728x90
반응형
'모바일 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 제너릭(Generic) (0) | 2021.04.11 |
---|---|
[Kotlin] 코틀린 인터페이스, 상속과 인터페이스의 차이 (0) | 2021.04.11 |
[Kotlin] 코틀린 변수 범위, 접근 제어자, 접근 제어자 예제 (0) | 2021.04.11 |
[Kotlin] 클래스(Class) 실습 TV 만들기 (0) | 2021.04.09 |
[Kotlin] 클래스(Class) 실습 은행 계좌 만들기 (0) | 2021.04.09 |
댓글