본문 바로가기

Study/Kotlin

Kotlin 기본 문법 따라하기 - 3. Class

Kotlin 기본 문법 따라하기

 

Classes and Inheritance - Kotlin Programming Language

 

kotlinlang.org

package com.kotlintest.test

import com.sun.tools.doclets.internal.toolkit.util.DocPath.parent

class MainClzClass() {

    fun main() {

        val person1 = Person("kim");
        println("person1 : ${person1.name} ${person1.age} ${person1.birthday}")

        val person2 = Person("lee", 10);
        println("person2 : ${person2.name} ${person2.age} ${person2.birthday}")

        val person3 = Person("hong", 15, "080912");
        println("person3 : ${person3.name} ${person3.age} ${person3.birthday}")


        val initOrderDemo = InitOrderDemo("ssing")

        println("Customer.customerKey : ${Customer("ssing").customerKey}")


        val constructors = Constructors(1)

        val derived = Derived("ssing", "hong")
    }

}


class Empty


class Person {

    var name: String? = null
    var age: Int? = null
    var birthday: String? = null

    constructor(name: String) {
        this.name = name
    }

    constructor(name: String, age: Int) : this(name) {
        this.age = age
    }

    constructor(name: String, age: Int, birthday: String) : this(name, age) {
        this.birthday = birthday
    }

}


class InitOrderDemo(name: String) {

    val firstProperty = "First property: $name".also(::println)

    init {
        println("First initalizer block that prints ${name}")
    }

    val secondProperty = "Second property: ${name.length}".also(::println)

    init {
        println("Second initializer block that prints ${name.length}")
    }
}


class Customer(name: String) {
    val customerKey = name.toUpperCase()
}


class PersonDetail {
    var children: MutableList<PersonDetail> = mutableListOf<PersonDetail>();
    constructor(personDetail: PersonDetail) {
        personDetail.children.add(this)
    }
}


class Constructors {
    init {
        println("Init block")
    }

    constructor(i: Int) {
        println("Constructor")
    }
}


open class Shape {
    open val vertexCount: Int = 0
}
class Ractangle() : Shape() {
    override val vertexCount: Int = 4
}


open class Base(val name: String) {
    init {
        println("Initialzing base")
    }

    open val size: Int = name.length.also { println("Initializing size in Base: $it") }
}

class Derived(
        name: String,
        val lastName: String) : Base(name.capitalize().also { println("Argument for Base $it") }) {

    init {
        println("Initializing Dervied")
    }

    override val size: Int = (super.size + lastName.length).also { println("Initializing size in Derived: $it") }
}

 

person1 : kim null null
person2 : lee 10 null
person3 : hong 15 080912
First property: ssing
First initalizer block that prints ssing
Second property: 5
Second initializer block that prints 5
Customer.customerKey : SSING
Init block
Constructor
Argument for Base Ssing
Initialzing base
Initializing size in Base: 5
Initializing Dervied
Initializing size in Derived: 9