open class Car(engine: String, body: String){
fun drive(){
}
fun stop(){
}
}
class SuperCar(engine: String, body: String): Car(engine, body){
}
open class Car(engine: String, body: String){
open fun drive(): String{
return "달린다."
}
fun stop(){
}
}
class SuperCar(engine: String, body: String): Car(){
override fun drive(): String{
val run = super.drive()
return "빨리 $run"
}
}
Charactor 클래스 : 부모 클래스 -> attack과 defense 가능
SuperNight 클래스 : Charactor를 상속받는 자식 클래스
SuperMonster 클래스 : Charactor를 상속받는 자식 클래스 + bite 가능
// 부모 클래스이므로 open 키워드 사용
open class Charactor(var hp: Int, val power: Int){
fun attack(charactor: Charactor, power: Int = this.power){
charactor.defense(power)
}
// SuperNight클래스에서 오버라이딩 하기 때문에 open 키워드 사용
open fun defense(damage: Int){
hp -= damage
if(hp > 0) println("${javaClass.simpleName}의 남은 체력 : $hp")
else println("사망했습니다.")
}
}
class SuperNight(hp: Int, power: Int): Charactor(hp, power){
val defensePower = 2
// 부모 클래스의 defense 오버라이딩
override fun defense(damage: Int) {
super.defense(damage - defensePower)
}
}
class SuperMonster(hp: Int, power: Int): Charactor(hp, power){
// SuperMonster의 추가 기능 bite
fun bite(charactor: Charactor){
super.attack(charactor, power + 2)
}
}
fun main(args: Array<String>){
val monster = SuperMonster(100, 10)
val night = SuperNight(200, 8)
monster.attack(night)
monster.bite(night)
}
if(hp > 0) println("${javaClass.simpleName}의 남은 체력 : $hp")