サーチ…


前書き

どんなオブジェクト指向プログラミング言語でも、ある種のクラス継承があります。私に改訂させてください:

あなたがフルーツの束をプログラムしなければならないと想像してください: ApplesOrangesPears 。彼らはすべてサイズ、形、色が異なります。そのため、私たちは異なるクラスを持っています。

しかし、彼らの違いが一瞬でも問題ではないと言いましょう。正確には関係なく、 Fruitほしいと思っていますか? getFruit()はどのような戻り型がありますか?

答えはクラスFruitです。私たちは新しいクラスを作り、それからすべての果実を継承します!

構文

  • オープン{ベースクラス}
  • class {派生クラス}:{基本クラス}({Init Arguments})
  • override {関数の定義}
  • {DC-Object}は{Base Class}です== true

パラメーター

パラメータ詳細
ベースクラス継承元のクラス
派生クラスベースクラスから継承するクラス
Init引数基本クラスのコンストラクタに渡される引数
関数定義基本クラスのコードと異なるコードを持つ派生クラスの関数
DCオブジェクト派生クラスの型を持つ「派生クラスオブジェクト」オブジェクト

基本: 'open'キーワード

Kotlinでは、クラスはデフォルト最終的です 。つまり、クラスは継承できません。

クラスの継承を許可するには、 openキーワードを使用し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