728x90

추상 클래스

- 클래스와 일부 멤버가 abstract로 선언되면 추상 클래스이다.
- abstract 키워드 사용시 클래스나 함수에 open 키워드를 따로 명시하지 않아도 된다.
- abstract 함수는 선언부분만 있고 구현부가 없다.

  추상 함수는 상속받은 서브 클래스에서 override하여 재정의해야 한다.
- 다중 상속은 불가능하다.


※ 추상 클래스는 미완성 설계도이다. 미완성 설계도로는 제품을 만들 수가 없다.

   클래스는 직접 객체 생성(인스턴스화)을 할 수 있지만, 추상 클래스는 직접 객체 생성을 할 수가 없다.

   반드시 상속을 받는 자식 클래스가 있어야만 비로소 객체를 생성할 수 있다.


fun main() {
    var b = Dog("불독", 5)

    b.introduce()
    b.bark()
    b.sniff()

    var c = Cat("나갈래", 4)
    c.introduce()
    c.meow()
    c.sniff()
}

abstract class Animal(var name:String, var age:Int, var type:String){
    abstract fun introduce()
    fun sniff(){
        println("냄새를 맡느라고 끙끙거린다.")
    }
}

class Dog(name:String, age:Int) : Animal (name,age,"개"){
    override fun introduce(){
        println("타입 : Dog, ${name}, ${age}살 입니다.")
    }

    fun bark(){
        println("멍멍멍")
    }
}

class Cat(name: String, age: Int) : Animal(name, age, "고양이"){
    override fun introduce(){
        println("타입 : Cat, ${name}, ${age}살 입니다.")
    }

    fun meow() {
        println("야옹야옹")
    }
}


예제2) 출처 : https://www.programiz.com/kotlin-programming/abstract-class

abstract class Person(name: String) {
init {
println("My name is $name.")
}
// 일반 메서드
fun displaySSN(ssn: Int) {
println("My SSN is $ssn.")
}
// 추상 메서드
abstract fun displayJob(description: String)
}

class Teacher(name: String): Person(name) {
// 추상 메서드 구현
override fun displayJob(description: String) {
println(description)
}
}

fun main(args: Array<String>) {
val jack = Teacher("Jack Smith")
jack.displayJob("I'm a mathematics teacher.")
jack.displaySSN(23123)
}


728x90

'안드로이드 > Kotlin 문법' 카테고리의 다른 글

코틀린 접근 제한자  (0) 2020.01.14
코틀린 패키지  (0) 2020.01.13
코틀린 인터페이스  (0) 2020.01.13
코틀린(Kotlin) 클래스 선언 및 상속  (0) 2020.01.12
코틀린 기본 이해  (0) 2020.01.07
블로그 이미지

Link2Me

,