Café y Código

9. Clases y Objetos: POO en Kotlin

Clases básicas

Kotlin hace las clases concisas con el constructor primario integrado:

clase-basica.kt
KOTLIN
1 class Persona(val nombre: String, var edad: Int)
2
3 fun main() {
4 val persona = Persona("Ana", 25)
5 println(persona.nombre) // "Ana"
6 persona.edad = 26 // var: se puede modificar
7 println(persona.edad) // 26
8 }

data class: Para datos

data class genera automáticamente equals(), hashCode(), toString() y copy():

data-class.kt
KOTLIN
1 data class Contacto(val nombre: String, val telefono: String)
2
3 fun main() {
4 val contacto = Contacto("Luis", "123456789")
5 println(contacto) // Contacto(nombre=Luis, telefono=123456789)
6
7 // Copiar con cambios
8 val actualizado = contacto.copy(telefono = "987654321")
9 println(actualizado) // Contacto(nombre=Luis, telefono=987654321)
10 }

object: Singletons

Un object es una clase con una sola instancia:

singleton.kt
KOTLIN
1 object Config {
2 val version = "1.0"
3 val debug = true
4 }
5
6 fun main() {
7 println(Config.version) // "1.0"
8 println(Config.debug) // true
9 // No se puede: val c = Config()
10 }

Herencia con open

Por defecto las clases son final. Usa open para permitir herencia:

herencia.kt
KOTLIN
1 open class Animal(val nombre: String) {
2 open fun sonido() = "..."
3 }
4
5 class Perro(nombre: String) : Animal(nombre) {
6 override fun sonido() = "Guau!"
7 }
8
9 class Gato(nombre: String) : Animal(nombre) {
10 override fun sonido() = "Miau!"
11 }
12
13 fun main() {
14 val mascota: Animal = Perro("Rex")
15 println("${mascota.nombre} dice: ${mascota.sonido()}")
16 // Rex dice: Guau!
17 }

💻 Misión

Crea una data class `Producto` con nombre y precio. Crea 2 productos, imprímelos y crea una copia de uno con precio actualizado.

👁️ Ver solución sugerida
main.kt
KOTLIN
1 data class Producto(val nombre: String, val precio: Double)
2
3 fun main() {
4 val leche = Producto("Leche", 1.5)
5 val pan = Producto("Pan", 0.8)
6 println(leche)
7 println(pan)
8
9 val leche2 = leche.copy(precio = 1.8)
10 println("Leche actualizada: $leche2")
11 }

Pon a prueba tus clases

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.