Costruttori primari
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 3 di 57.
La maggior parte delle classi Kotlin riceve i valori iniziali in un costruttore primario, scritto tra parentesi dopo il nome della classe. val o var davanti a un parametro lo rende anche una proprietà:
class Book(val title: String, var pages: Int)All'interno di main:
val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)Output:
Dune
420Un parametro senza val o var è disponibile solo durante la creazione dell'istanza, per esempio per calcolare una proprietà. Le proprietà val non possono essere riassegnate dopo la creazione; le proprietà var sì:
class Temperature(celsius: Double) {
val fahrenheit = celsius * 9 / 5 + 32
}All'interno di main:
val t = Temperature(100.0)
println(t.fahrenheit)Output:
212.0I parametri del costruttore possono avere valori predefiniti ed essere passati per nome, quindi un solo costruttore copre molti modi per creare un'istanza:
class Timer(val seconds: Int, val label: String = "timer")All'interno di main:
val egg = Timer(300, "egg")
val quick = Timer(30)
val named = Timer(label = "tea", seconds = 180)
println("${egg.label} ${egg.seconds}")
println("${quick.label} ${quick.seconds}")
println("${named.label} ${named.seconds}")Output:
egg 300
timer 30
tea 180All'interno del corpo della classe, this fa riferimento all'istanza corrente. È necessario quando un parametro di un metodo ha lo stesso nome di una proprietà:
class Player(var name: String) {
fun rename(name: String) {
this.name = name
}
}All'interno di main:
val p = Player("anon")
p.rename("Ada")
println(p.name)Output:
AdaSfida
FacileDichiara la classe Account con un costruttore primario: un owner di sola lettura e un balance modificabile con valore predefinito 0. Aggiungi summary(), che restituisce Ada has 150.
Il codice fornito legge un proprietario e, se è presente una seconda riga, un saldo iniziale. Crea il conto con o senza il saldo e stampa summary().
Il tuo codice va in Account.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Codice di input/output fornito: lascialo così com'è
val input = generateSequence(::readLine).toList()
val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
println(account.summary())
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libriEsercitati da solo: Playground Kotlin