수색…


소개

모든 객체 지향 프로그래밍 언어에는 어떤 형태의 클래스 상속이 있습니다. 내가 수정하자 :

과일, Apples , OrangesPears 잔뜩 프로그램해야한다고 상상해보십시오. 그들은 모두 크기, 모양, 색이 다릅니다. 그래서 우리는 다른 수업을합니다.

그러나 그들의 차이점이 잠깐 문제가되지 않는다고 가정 해 봅시다. 정확하게 Fruit 원하십니까? 어떤 반환 유형은 getFruit() 이 가질 수 있습니까?

대답은 Fruit 입니다. 우리는 새로운 반을 만들고 모든 과일을 그것으로부터 상속받습니다!

통사론

  • {기본 클래스}
  • 클래스 {파생 클래스} : {기본 클래스} ({초기화 인수})
  • override {함수 정의}
  • {DC-Object}는 {Base Class}입니다. == true

매개 변수

매개 변수 세부
기본 클래스 상속 된 클래스
파생 클래스 기본 클래스에서 상속받은 클래스
Init 인수 기본 클래스의 생성자에 전달 된 인수
함수 정의 기본 클래스에서 다른 코드와 다른 파생 클래스의 함수
직류 - 개체 파생 클래스의 형식을 가진 "파생 클래스 개체"개체

기본 사항 : '공개'키워드

Kotlin에서 클래스는 기본적으로 final 이므로 상속받을 수 없습니다.

클래스에서 상속을 허용하려면 open 키워드를 사용하십시오.

open class Thing {
    // I can now be extended!
}

참고 : 추상 클래스, 봉인 된 클래스 및 인터페이스는 기본적으로 open .

클래스에서 필드 상속

기본 클래스 정의 :

open class BaseClass {
    val x = 10
}

파생 클래스 정의 :

class DerivedClass: BaseClass() {
    fun foo() {
        println("x is equal to " + x)
    }
}

하위 클래스 사용 :

fun main(args: Array<String>) {
    val derivedClass = DerivedClass()
    derivedClass.foo() // prints: 'x is equal to 10'
}

클래스에서 메서드 상속

기본 클래스 정의 :

open class Person {
    fun jump() {
        println("Jumping...")
    }
}

파생 클래스 정의 :

class Ninja: Person() {
    fun sneak() {
        println("Sneaking around...")
    }
}

닌자는 Person의 모든 메소드에 액세스 할 수 있습니다.

fun main(args: Array<String>) {
    val ninja = Ninja()
    ninja.jump()  // prints: 'Jumping...'
    ninja.sneak() // prints: 'Sneaking around...'
}

속성 및 메서드 재정의

속성 무시 (읽기 전용 및 변경 가능) :

abstract class Car {
    abstract val name: String;
    open var speed: Int = 0;
}

class BrokenCar(override val name: String) : Car() {
    override var speed: Int
        get() = 0
        set(value) {
            throw UnsupportedOperationException("The car is bloken")
        }
}

fun main(args: Array<String>) {
    val car: Car = BrokenCar("Lada")
    car.speed = 10
}

메소드 오버라이드 :

interface Ship {
    fun sail()
    fun sink()
}

object Titanic : Ship {

    var canSail = true

    override fun sail() {
        sink()
    }

    override fun sink() {
        canSail = false
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow