// Kotlin 에서는 상속 가능한 클래스를 만들 때 class 앞에
//open을 기재해야 합니다.
open class Super{
//오버라이딩 가능한 메소드를 만들 때 앞에 open을 추가해야합니다.
open fun method(){
}
}
// 인스턴스를 생성할 수 없는 추상 클래스
abstract class AbstractClass{
// 하위 클래스에서 반드시 재정의 해야 하는 추상 메소드
abstract fun method()
}
//인터페이스
interface Interface{
fun method() // abstract가 없어도 내용이 없으면 추상 메소드
var prop1 : String //추상 프로퍼티가 됩니다.
//var prop2 : String = "adam" //프로퍼티 초기화를 하면 에러
//val 로 선언한 프로퍼티는 get을 생성해야합니다.
// field 사용은 안됨
// 특정한 리터럴을 리턴하는 구조로 만들어야 합니다.
val prop3 :String
get() = "adam"
// var 을 추상 프로퍼티가 아닌 구조로 만들려면
// get 과 set을 모두 생성해야합니다.
// field 는 사용할 수 없다
var prop4 : Int
get() = 1
set(value){
}
}
// 인터페이스 구현을 위한 클래스
class InterfaceImpl:Interface{
override fun method() {
// 추상 메소드를 오버라이딩 할 땐 상위 메소드 호출 못함
//super.method()
println("추상 메소드 구현")
}
override var prop1: String
get() = TODO("Not yet implemented")
set(value) {}
}
fun main (args:Array<String>){
//인터페이스를 변수의 자료형으로 사용해서
//구현된 클래스의 인스턴스를 대입해서 메소드 호출
//인터페이스나 추상 클래스를 상속 받아서 사용하는 경우에
//변수의 자료형은 인터페이스나 추상 클래스로 많이 하고
//인스턴스를 대입 해서 사용하는 형태로 코드를 많이 작성
var i : Interface = InterfaceImpl()
i.method()
}
인터페이스에 일반 메소드 생성이 가능
> 일반 메소드를 만들면 추상 메소드가 아닌 default method가 만들어 집니다.
여러 인터페이스나 클래스의 인터페이스에 중복된 메소드가 존재하는 경우
1) 추상메소드가 여러개인 경우
=> 메소드 한 개만 구현 하면 됩니다.
2) 이미 구현된 메소드가 여러 개인 경우 하위 클래스에서 메소드 호출 방법
super<인터페이스나 클래스 이름>.메소드이름()
'kotlin' 카테고리의 다른 글
코틀린에서 다양한 클래스 생성 방법 (0) | 2020.10.19 |
---|---|
코틀린 : 인터페이스에서 프로퍼티 사용 (0) | 2020.10.19 |
코틀린 : 추상화 개념 다잡기 (0) | 2020.10.19 |
코틀린: 추상의 개념으로 간단한 게임 코딩 (0) | 2020.10.15 |
코틀린 : 참조형에서의 형 변환 (0) | 2020.10.15 |