fun main() {
var a = Animal("coco", 5, "강아지")
var b = Dog("coco", 5)
var c = Cat("mimi", 1)
a.introduce()
b.introduce()
b.bark(
c.meow()
}
open class Animal(var name: String, var age: Int, var type: String) {
fun introduce() {
println("나는 ${type} ${name}이고, ${age}살 이야.")
}
}
class Dog(name: String, age: Int): Animal(name, age, "강아지") {
fun bark() {
println("멍멍")
}
}
class Cat(name: String, age: Int): Animal(name, age, "고양이") {
fun meow() {
println("야옹")
}
}
open class Base // Class is open for inheritance
open class Base(p: Int)
class Derived(p: Int): Base(p)
기본 생성자 o in 파생 클래스: 매개 변수에 따라 해당 기본 생성자에서 기본 클래스를 초기화할 수 있으며 초기화해야 함
기본 생성자 x in 파생 클래스: 각 보조 생성자는 키워드를 사용하며 기본 형식을 초기화하거나 다른 생성자에게 위임해야 함. 이 경우 다른 보조 생성자가 기본 유형의 다른 생성자를 호출할 수 있음
class MyView: View {
constructor(ctx: Context): super(ctx)
constructor(ctx: Context, attrs: AttributeSet): super(ctx, attrs)
}
open operator fun wquals(other: Any?): Boolean
② hashCode( ): 개체의 해시 코드 값을 반환open fun hashCode(): Int
③ toString( ): 개체의 문자열 표현을 반환open fun toString(): String
oepn class Animal(var name: String, var age: Int) {
open fun cry() {
println("울음 소리")
}
}
class Dog(name: Sting, age: Int): Animal(name, age) {
override fun cry() {
println("멍멍")
}
}
class Cat(name: String, age: Int): Animal(name, age) {
override fun cry() {
println("냐옹")
}
}
상위 유형 목록에서 여러 유형을 선언할 때 동일한 메소드의 구현을 둘 이상 상속할 수 있음
// interface A, B 모두 foo 함수와 bar 함수 선언
interface A {
fun foo() { print("A) }
fun bar() // 구현 로직이 없어 오류 발생
}
interface B {
fun foo() { print("B")}
fun bar() { print("bar") }
}
// override를 통해 오류 해결
class C: A {
override fun bar() { print("bar") }
}
// interface A, B에서 상속한 모든 메서드를 구현
class D: A, B {
override fun foo(){
super<A>.foo()
super<B>.foo()
}
override fun bar() {
super<B>.bar()
}
}
인터페이스는 아래와 같이 선언하고 사용함
interface MyInterface {
fun bar()
fun foo() {
// optional body
}
}
class Child: MyInterface {
override fun bar() {
// body
}
}
interface Named {
val name: String
}
interface Person: Named {
val firstName: String
val latName: String
override val name: String get() = "$firstName $latName"
}
data clas Employee (
// implementing 'name' is not required
override val firstName: String
override val latName: String.
val position: Positon
): Person
[참고 사이트]
"Interface", Kotlin
"[kotlin] 코틀린 차곡차곡 - 5. 클래스 - 상속과 인터페이스", 사바라다는 차곡차곡
"[Android / Kotlin] 상속", wys4475.log