추상 클래스
- 클래스와 일부 멤버가 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) }
|