추상 클래스를 정의하면 반드시 구현 클래스에서 상속을 하고 추상 속성과 추상 메서드를 구현해야 사용할 수 있음
abstract class A {
var arg: String = "arg" // 일반 속성
abstract val abstArg: String // 추상 속성
open fun func() { // 일반 메서드
println("일반 메서드")
}
abstract fun abstFunc() // 추상 메서드
}
class B : A() { // 위임 호출
override var abstArg: String = "absArg" //추상 속성 오버라이딩
override fun abstFunc() { // 추상 메서드 오버라이딩
println("추상 메서드")
}
}
fun main(args: Array<String>) {
val obj = B()
println(obj.abstArg)
obj.abstFunc()
}
absArg 추상 메서드
추상 클래스 내의 초기화 블록 처리
abstract class A(arg: String) { // 주생성자 정의
init { // 초기화 블록 정의
println("arg는 $arg") // 주생성자의 매개변수 사용
}
abstract fun abstFunc()
}
class B(arg: String) : A(arg) {
override fun abstFunc() {
println("추상 메서드")
}
}
fun main(args: Array<String>) {
val obj = B("sumin")
obj.abstFunc()
}
arg는 sumin 추상 메서드