Zoeken…


Invoering

Elke objectgeoriënteerde programmeertaal heeft een vorm van klasse-overerving. Laat me herzien:

Stel je voor dat je een bos fruit moest programmeren: Apples , Oranges en Pears . Ze verschillen allemaal in grootte, vorm en kleur, daarom hebben we verschillende klassen.

Maar laten we zeggen dat hun verschillen er geen seconde toe doen en je wilt gewoon een Fruit , ongeacht welke precies? Welk getFruit() zou getFruit() hebben?

Het antwoord is klasse Fruit . We creëren een nieuwe klasse en laten alle vruchten ervan erven!

Syntaxis

  • open {Base Class}
  • class {Derived Class}: {Base Class} ({Init Argumenten})
  • overschrijven {Functiedefinitie}
  • {DC-Object} is {Base Class} == waar

parameters

Parameter Details
Basisklasse Klasse die is geërfd van
Afgeleide klasse Klasse die erft van Basisklasse
Eerste argumenten Argumenten werden doorgegeven aan constructeur van Base Class
Functie definitie Functie in afgeleide klasse die een andere code heeft dan dezelfde in de basisklasse
DC-Object "Afgeleide klasse-object" Object dat het type van de afgeleide klasse heeft

Basisprincipes: het 'open' trefwoord

In Kotlin zijn klassen standaard definitief, wat betekent dat ze niet kunnen worden geërfd.

Gebruik het open trefwoord om overname van een klasse toe te staan.

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

Opmerking: abstracte klassen, verzegeld klassen en interfaces zal worden open door gebrek.

Velden overnemen van een klasse

De basisklasse definiëren:

open class BaseClass {
    val x = 10
}

De afgeleide klasse definiëren:

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

Met behulp van de subklasse:

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

Erfmethoden van een klas

De basisklasse definiëren:

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

De afgeleide klasse definiëren:

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

De Ninja heeft toegang tot alle methoden in Persoon

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

Overheersende eigenschappen en methoden

Overheersende eigenschappen (zowel alleen-lezen als veranderlijk):

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
}

Negatieve methoden:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow