English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 추상 클래스와 Kotlin에서 추상 클래스를 구현하는 방법(예제를 통해)을 배울 수 있습니다.
Java와 마찬가지로, abstract 키워드는 Kotlin에서 추상 클래스를 선언하는 데 사용됩니다. 추상 클래스를 인스턴스화할 수 없습니다(추상 클래스의 객체를 생성할 수 없습니다). 그러나 자식 클래스를 상속할 수 있습니다.
추상 클래스의 구성원(속성 및 메서드)은 추상 키워드를 명시적으로 사용하지 않으면 비추상적입니다. 예를 들어:
abstract class Person { var age: Int = 40 fun displaySSN(ssn: Int) { println("저의 사회보험 번호는:$ssn.") } abstract fun displayJob(description: String) }
여기서,
추상 클래스 Person을 생성합니다. 이 클래스의 객체를 생성할 수 없습니다.
이 클래스는 추상 속성 age와 추상 메서드 displaySSN()를 가지고 있습니다. 자식 클래스에서 이 구성원을 재정의할 필요가 있으면 open 키워드를 사용해야 합니다.
이 클래스는 추상 메서드 displayJob()를 가지고 있습니다. 이 메서드는 어떤 구현도 없으며, 자식 클래스에서는 반드시 재정의해야 합니다.
주의:추상 클래스는 항상 열려 있습니다. 추상 클래스에서 자식 클래스를 상속받을 때 open 키워드를 명시적으로 사용하지 않아도 됩니다.
abstract class Person(name: String) { init { println("저의 이름은 $name.") } fun displaySSN(ssn: Int) { println("저의 사회보험 번호는 $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("저는 수학 교사입니다.") jack.displaySSN(23123) }
이 프로그램을 실행할 때, 출력은 다음과 같습니다:
저의 이름은 Jack Smith입니다. 저는 수학 교사입니다. 저의 사회보험 번호는 23123.
여기서, Teacher 클래스는 추상 클래스 Person을 상속받습니다
Teacher 객체의 인스턴스 jack가 생성되었습니다. 메인 생성자를 생성할 때, 'Jack Smith'를 인자로 전달합니다. 이는 Person 클래스의 초기화 블록을 실행합니다.
그런 다음, Jack 객체를 사용하여 displayJob() 메서드를 호출합니다. 주의하십시오, displayJob() 메서드는 기본 클래스에서 추상적으로 선언되었으며, 서브 클래스에서 오버라이드되었습니다.
마지막으로, Jack 객체를 사용하여 displaySSN() 메서드를 호출합니다. 이 메서드는 비 추상적이며 Person 클래스에서 선언되었습니다(교사 클래스에서 선언되지 않았습니다).
관련 지식: Kotlin 인터페이스
Kotlin 인터페이스는 추상 클래스와 유사하지만, 인터페이스는 상태를 저장할 수 없으며 추상 클래스는 저장할 수 있습니다.
따라서 인터페이스는 속성이 있을 수 있지만, 반드시 추상적이거나 접근자 구현을 제공해야 합니다. 그러나 추상 클래스의 속성은 반드시 추상적이지 않아도 됩니다.