Kotlin
Klass ärft
Sök…
Introduktion
Alla objektorienterade programmeringsspråk har någon form av klassarv. Låt mig se över:
Föreställ dig att du var tvungen att programmera ett gäng frukt: Apples
, Oranges
och Pears
. De har alla olika storlek, form och färg, det är därför vi har olika klasser.
Men låt oss säga att deras skillnader inte betyder någon sekund och att du bara vill ha en Fruit
, oavsett vilken exakt? Vilken getFruit()
skulle getFruit()
ha?
Svaret är klass Fruit
. Vi skapar en ny klass och får alla frukter att ärva från den!
Syntax
- öppna {Base Class}
- klass {Derived Class}: {Base Class} ({Init Arguments})
- åsidosätta {Funktionsdefinition}
- {DC-Object} är {Base Class} == true
parametrar
Parameter | detaljer |
---|---|
Basklass | Klass som ärvs från |
Deriverad klass | Klass som ärver från basklassen |
Init-argument | Argument överförda till konstruktören av basklassen |
Funktionsdefinition | Funktion i deriverad klass som har annan kod än samma i basklassen |
DC-Object | ”Derived Class-Object” Objekt som har typen av Derived Class |
Grunder: det "öppna" nyckelordet
I Kotlin är klasser som standard slutliga vilket innebär att de inte kan ärvas från.
Använd det open
nyckelordet för att tillåta arv på en klass.
open class Thing {
// I can now be extended!
}
Obs: abstrakta klasser, förseglade klasser och gränssnitt kommer att vara
open
standard.
Arv fält från en klass
Definiera basklassen:
open class BaseClass {
val x = 10
}
Definiera den härledda klassen:
class DerivedClass: BaseClass() {
fun foo() {
println("x is equal to " + x)
}
}
Använda underklassen:
fun main(args: Array<String>) {
val derivedClass = DerivedClass()
derivedClass.foo() // prints: 'x is equal to 10'
}
Arvande metoder från en klass
Definiera basklassen:
open class Person {
fun jump() {
println("Jumping...")
}
}
Definiera den härledda klassen:
class Ninja: Person() {
fun sneak() {
println("Sneaking around...")
}
}
Ninja har tillgång till alla metoder i Person
fun main(args: Array<String>) {
val ninja = Ninja()
ninja.jump() // prints: 'Jumping...'
ninja.sneak() // prints: 'Sneaking around...'
}
Övervägande egenskaper och metoder
Överträffande egenskaper (både skrivskyddad och muterbar):
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
}
Övervägande metoder:
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow