기존에 존재하는 클래스로부터 새로운 클래스를 생성할 수 있도록 함

open class BasePerson(_name: String, _age: Int) {
	val name: String = `_name`
	val age: Int = _age

	fun talk() {
		println("이름은 $name, 나이는 $age")
	}
}

class MathTeacher(name: String, age: Int): BasePerson(name, age) {
	fun teachMath() {
		println("Teach Math.")
	}
}

fun main(args: Array<String>) {
	val person1 = MathTeacher("Cane", 30)
	person1.talk()
	person1.teachMath()
}

안녕하세요. 제 이름은 Cane 이고, 30 입니다.
Teach Math.

상속받는 객체가 더 많은 필드를 기본 생성자로 사용한 경우

open class Person(name: String, age: Int) {
    init{
        println("Person $name, $age.")
    }
}

class BaseBallPlayer(name: String, age: Int, club: String) : Person(name, age) {
    init {
        println("Baseball player name: $name, age: $age and club: $club.")
    }
	
    fun playBaseball() {
        println("Play Baseball.")
    }
}

fun main(args: Array<String>){
    val person1 = BaseBallPlayer("ksh", 31, "doosan")
    person1.playBaseball()
}

스크린샷 2024-08-06 오전 1.29.02.png

보조 생성자 사용

open class Person {
    
    var name: String = ""
    var age: Int = 0
    
    constructor(_name: String){
        this.name = name
        
        println("Person $name $age")
    }
    
    constructor(_name: String, _age: Int){
        this.name = _name
        this.age = _age
        
        println("Person $name $age")
    }
}

class BaseballPlayer : Person {
    constructor(_name: String) :  this(_name, 10){
        
    }
    
    constructor(_name: String, _age: Int) : super(_name, _age) {
        
    }
    
    fun playBaseball() {
        println("Doosan Bears")
    }
}

fun main(arge: Array<String>) {
    val person1 = BaseballPlayer("ksh")
    val person2= BaseballPlayer("ksh", 31)
}

생성자 위임

class BaseballPlayer : Person {
    // 이름만 받는 보조 생성자, 나이를 기본값 10으로 설정
    constructor(_name: String) : this(_name, 10) {
        // 이 생성자는 별도의 본문이 없음
    }

    // 이름과 나이를 받는 보조 생성자
    constructor(_name: String, _age: Int) : super(_name, _age) {
        // 초기화 로직이 있다면 여기에 작성
    }
}

this(*name, 10) : 생성자 위임 호출. 같은 클래스 BaseballPlayer 의 다른 생성자를 매개변수 _name10 을 사용하여 호출하라고 지시한다.*

무한 재귀 호출 오류

class BaseballPlayer : Person {
    constructor(_name: String) :  this(_name) {
        println("첫번째 생성자")
    }
    
    constructor(_name: String, _age: Int) : super(_name, _age) {
        println("두번째 생성자")
    }
    
    fun playBaseball() {
        println("Doosan Bears")
    }
}