상속
📌 코틀린의 최상위 클래스는 Any
클래스에 상위타입을 선언하지 않으면 Any 가 상속됨
class Example 1 // 암시적인 Any 상속
class Example 2 : Anyy() // 명시적인 Any 상속
📌 Any는 java.lang.Object 와는 다른 클래스임
- equals(), hashCode(), toString() 만 있음
package kotlin
public open class Any {
public open operator fun equals(other: Any?) : Boolean
public open fun hashCode(): Int
public open fun toString(): String
}
📌 명시적으로 상위타입을 선언하려면,
클래스헤더의 콜론(:) 뒤에 상위타입을 선언하면 됨
open class Base(p: Int)
class Derived(p: Int) : Base(p)
📌 파생클래스에 기본생성자가 있으면,
파생클래스의 기본생성자에서 상위타입의 생성자를 호출해서 초기화할 수 있음
📌 파생클래스에 기본생성자가 없으면,
각각의 보조생성자에서 상위타입을 super 키워드를 이용해서 초기화 해주어야 함
or 다른 생성자에게 상위타입을 초기화할 수 있게 위임해주어야 함
class MyView : View {
constructor() : super(1)
constructor(ctx: Int) : this()
constructor(ctx: Int, attrs: Int) : super(ctx, attrs)
}
📌 open 어노테이션은 java의 final 과 반대임
open class 는 다른 클래스가 상속할 수 있음
기본적으로 코틀린의 모든 class 는 final 임
이유는 : Effective Java, Item 17: Design and document for inheritance or else prohibit ti.
open class Base(p: Int)
class Derived(p: Int) : Base(p)
메소드 오버라이딩
📌 오버라이딩 될 메소드
- open 어노테이션이 요구됨
📌 오버라이딩 된 메소드
- override 어노테이션이 요구됨
open class Base {
open fun v() {}
fun nv() {}
}
class Derived(): Base() {
overried fun v() {}
}
프로퍼티 오버라이딩
📌 메소드 오버라이딩과 유사한 방식으로 오버라이딩 가능
open class Foo {
open val x: Int get {...}
}
class Bar1 : Foo() {
override val x: Int = ...
}
오버라이딩 규칙
📌 같은 멤버에 대한 중복된 구현을 상속받은 경우, 상속받은 클래스는 해당 멤버를 오버라이딩하고 자체 구현을 제공해야 함
super + <클래스명> 을 통해서 상위 클래스를 호출 할 수 있음
open class AA() {
open fun f() {
println("aaaaaa")
}
}
interface BB {
fun f() {
println("bbbbbb")
}
}
class CC : AA(), BB {
override fun f() {
super<AA>.f()
super<BB>.f()
}
}
추상 클래스
📌 abstract 멤버는 구현이 없음
abstract 클래스나 멤버는 open 이 필요 없음
abstract class AbsClass {
abstract fun f()
}
class MyClass(): AbsClass() {
override fun f() { /* 구현 */ }
}
728x90
반응형
'안드로이드 프로그래밍 > kotlin' 카테고리의 다른 글
[Kotlin] 구글 지도 API 어플 만들기 (Google Maps API 받아오기, 지도 앱 만들기) (0) | 2022.03.04 |
---|---|
[KotlinSyntax] Properties and Fields (0) | 2022.03.01 |
[KotlinSyntax] Inheritance 상속 (0) | 2022.02.21 |
[KotlinSyntax] Class (0) | 2022.02.21 |
[kotlin syntax] package, Return and Jumps (1) | 2022.02.20 |