Constructores primarios
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 3 de 57.
La mayoría de las clases de Kotlin reciben sus valores iniciales en un constructor primario, escrito entre paréntesis después del nombre de la clase. val o var delante de un parámetro lo convierte también en una propiedad:
class Book(val title: String, var pages: Int)Dentro de main:
val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)Salida:
Dune
420Un parámetro sin val ni var solo está disponible mientras se crea la instancia, por ejemplo, para calcular una propiedad. Las propiedades val no se pueden reasignar después de la creación; las propiedades var sí:
class Temperature(celsius: Double) {
val fahrenheit = celsius * 9 / 5 + 32
}Dentro de main:
val t = Temperature(100.0)
println(t.fahrenheit)Salida:
212.0Los parámetros del constructor pueden tener valores predeterminados y se pueden pasar por nombre, por lo que un constructor abarca muchas formas de crear una instancia:
class Timer(val seconds: Int, val label: String = "timer")Dentro de 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}")Salida:
egg 300
timer 30
tea 180Dentro del cuerpo de la clase, this se refiere a la instancia actual. Se necesita cuando un parámetro de método tiene el mismo nombre que una propiedad:
class Player(var name: String) {
fun rename(name: String) {
this.name = name
}
}Dentro de main:
val p = Player("anon")
p.rename("Ada")
println(p.name)Salida:
AdaDesafío
FácilDeclara la clase Account con un constructor principal: un owner de solo lectura y un balance modificable cuyo valor predeterminado es 0. Añade summary(), que devuelve Ada has 150.
El código proporcionado lee un propietario y, cuando hay una segunda línea, un saldo inicial. Crea la cuenta con o sin el saldo y muestra summary().
Tu código va en Account.kt. Main.kt contiene el código proporcionado de entrada y salida y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: mantenlo tal como está
val input = generateSequence(::readLine).toList()
val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
println(account.summary())
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesConstructores primariosBloques init y validaciónConstructores secundariosRepaso - Tarjeta de biblioteca4Herencia
Clases abiertas y subclasesSobrescritura de miembrossuper y constructoresClases abstractasRepaso: directorio del personal2Propiedades y encapsulación
Accesores personalizadosModificadores de visibilidadSetters privadoslazy y lateinitRepaso: cuenta bancaria5Interfaces
Declaración de interfacesMétodos predeterminadosInterfaces múltiplesInterfaces como tiposRepaso: métodos de pago8Genéricos
Funciones genéricasClases genéricasRestricciones de tiposVariancia con in y outRepaso - Cola de prioridad11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Kotlin