# this로 현재 객체 참조하기
package chap02.section1
/* this로 현재 객체 참조하기 */
/* 여러개의 부 생성자 참조하기 */
open class Person{
constructor(firstName : String){
println("[Person] firstName : $firstName")
}
constructor(firstName: String, age : Int){ // 3
println("[Person] firstName : $firstName, $age")
}
}
class Developer:Person{
constructor(firstName: String):this(firstName,10){ // 1
println("[Developer] $firstName")
}
constructor(firstName: String, age : Int):super(firstName,age){ // 2
println("[Developer] $firstName,$age")
}
}
fun main(){
val sean = Developer("Sean")
}
// main 함수에서 Developer("Sean")을 통해 객체를 생성
// 이 때 인자가 1개이므로 먼저 Developer class의 1번 생성자로 진입
// 하지만 코드를 실행하기 앞에 this()에 의해 firstName과 10을 인자로 가지고 Developer 클래스의 다른 생성자를 호출
// 이 this()는 2개의 인자를 가지는 부 생성자인 2번을 가리킨다.
// 여기에 다시 super()가 사용되었는데 super는 상속하고 있는 상위 클래스를 가리키기 때문에 2개의 인자를 처리할 수 있는 Person 클래스의 3번 부 생성자를 호출하낟.
// 코드를 실행하면 3 -> 2 -> 1 순서대로 코드가 실행된다.
# 주 생성자와 부 생성자 함께 사용하기
package chap02.section1
/* 주 생성자와 부 생성자 함께 사용하기 */
// out이라는 인자에 println()을 기본값으로 할당해 인자에 접근할 때 출력되도록 설정
// 2번 주 생성자
class Person(firstName : String, out : Unit = println("[Primary Constructor] Parameter")){
val fName = println("[Property] Person fName : $firstName") // 3 프로퍼티 할당
init { // 4 초기화 블록
println("[init] Person init block")
}
// 1번 부 생성자
// out이라는 인자에 println()을 기본값으로 할당해 인자에 접근할 때 출력되도록 설정
constructor(firstName: String, age : Int, out : Unit = println("[Secondary Constrictor] Parameter")) : this(firstName){
println("[Secondary Constructor] Body : $firstName, $age") // 부 생성자 본문
}
}
fun main(){
val p1 = Person("jkb",30) // 1 -> 2 호출, 3 -> 4 -> 5 실행
println()
val p2 = Person("Dooly") // 2 호출, 3 -> 4 실행
}
'Kotlin' 카테고리의 다른 글
Kotlin - 가시성 지시자 (0) | 2022.06.14 |
---|---|
Kotlin - 인터페이스 (0) | 2022.06.14 |
Kotlin - 상속과 다형성 (0) | 2022.06.14 |
Kotlin - 클래스 , 생성자 (0) | 2022.06.14 |
Kotlin - Try~Catch (0) | 2022.06.14 |