추상 클래스 (Abstract Class)

 클래스와 일부 멤버가 abstract로 선언되면 추상 클래스입니다. abstract 멤버는 아시다시피 클래스 내에서 아무런 구현이 없습니다.

     abstract class Student {

        abstract fun learnKotlin() // 최소 하나 이상의 멤버가 abstract

        fun learnJava() {}

    }

 

 또한 non-abstract open 멤버를 abstract 멤버로 재정의(override) 할 수 있습니다. 

[Remind] 상속을 하려면 꼭 open을 선언해주어야 합니다. 왜냐하면 아무 선언이 없으면 코틀린 클래스는 기본적으로 Java의 final 클래스와 같기 때문입니다.


     open class Person {

        open fun needToSleep() {}

    }


    abstract class Student : Person() {

        override abstract fun needToSleep()

        abstract fun learnKotlin()

        fun learnJava() {}

    }


인터페이스 (Interface)

 코틀린의 인터페이스는 Java8과 매우 유사합니다. abstract method 뿐 만 아니라 method의 구현도 가능합니다.

 [Tip] 인터페이스라고 하면 모든 method가 abstract method인 것이라고 알고 있을 수도 있는데 Java8에서 default 키워드로 method 구현이 가능해졌습니다.

Java

public interface Person {

 void needToSleep(); // interface 내에서는 abstract로 유추

 default String getName() {

   return "Hong";

  }


코틀린

     interface Person {

        fun needToSleep()

        fun getName():String = "Hong"

    }


 interface에서 구현한 method도 override가 가능합니다.

    interface Person {

        fun needToSleep()

        fun getName():String = "Hong"

    }


    class Student : Person {

        override fun needToSleep() {


        }

        fun learnKotlin() {


        }

        override fun getName(): String {

            return "Tom"

        }

    } 


 또한 다음과 같이 하나 이상의 interface를 구현할 수 있습니다.

     interface Person {

        fun needToSleep()

        fun getName():String = "Hong"

    }


    interface Adult {

        fun needToHoliday()

        fun getName():String = "Choi"

    }


    class Student : Person, Adult {

        override fun needToHoliday() {

            

        }

        override fun needToSleep() {


        }

        fun learnKotlin() {


        }

        override fun getName(): String {

            return "Tom"

        }

    }





+ Recent posts