0Pricing
Kotlin Academy · Lección

Clases anidadas

Clases dentro de otras clases

Clases anidadas es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.

Clases dentro de clases

Kotlin permite declarar una clase dentro de otra clase. De forma predeterminada, esa clase es anidada y no mantiene una referencia a la instancia externa.

class Outer {
    class Nested {
        fun hello() = "Hi from Nested"
    }
}

fun main() {
    println(Outer.Nested().hello())
}

Crear una instancia anidada

Como una clase anidada es independiente, se crea mediante el nombre de la clase externa y sin una instancia externa: Outer.Nested().

class Computer {
    class Cpu {
        val cores = 8
    }
}

fun main() {
    val cpu = Computer.Cpu()
    println(cpu.cores)
}

Sin acceso a los miembros externos

Una clase anidada no puede acceder a los miembros de instancia de la clase externa porque no tiene una referencia a ella. Se comporta como una clase de nivel superior cuyo ámbito está bajo un nombre.

class Bank {
    val name = "ACME"
    class Branch {
        fun describe() = "A branch"
    }
}

fun main() {
    println(Bank.Branch().describe())
}

¿Por qué anidar clases?

Anidar clases expresa una agrupación lógica: el tipo interno pertenece conceptualmente al externo, lo que mejora la organización y el espacio de nombres.

class Http {
    class Request(val url: String)
}

fun main() {
    val r = Http.Request("/home")
    println(r.url)
}

Clase anidada con propiedades

Las clases anidadas son clases ordinarias: pueden tener constructores, propiedades y métodos.

class Garage {
    class Car(val model: String) {
        fun honk() = "$model: beep"
    }
}

fun main() {
    println(Garage.Car("Tesla").honk())
}

Acceso a miembros de Companion o similares a los estáticos

Las clases anidadas pueden referenciarse desde cualquier lugar mediante el nombre de la clase externa, de forma similar a una clase anidada estática en Java.

class Config {
    class Defaults {
        val timeout = 30
    }
}

fun main() {
    println(Config.Defaults().timeout)
}

Varias clases anidadas

Una clase externa puede contener varias clases anidadas para agrupar tipos relacionados.

class Shapes {
    class Circle(val r: Int)
    class Square(val side: Int)
}

fun main() {
    println(Shapes.Circle(5).r)
    println(Shapes.Square(4).side)
}

Anidamiento dentro de otro anidamiento

Puede anidar clases a más de un nivel de profundidad, aunque un anidamiento profundo puede perjudicar la legibilidad.

class A {
    class B {
        class C {
            val value = 42
        }
    }
}

fun main() {
    println(A.B.C().value)
}

Anidada frente a nivel superior

Funcionalmente, una clase anidada es como una clase de nivel superior; la única diferencia es su nombre cualificado. Elija el anidamiento cuando la relación mejore la claridad.

class Order {
    class Item(val price: Int)
}

fun main() {
    val total = Order.Item(10).price + Order.Item(5).price
    println(total)
}

Una agrupación práctica

Agrupar el tipo de resultado de un builder bajo su propietario resulta natural al leerlo.

class Parser {
    class Result(val ok: Boolean, val message: String)

    fun parse(text: String) = Result(text.isNotEmpty(), "parsed")
}

fun main() {
    val res = Parser().parse("data")
    println("${res.ok} ${res.message}")
}

Regla clave que debe recordar

La palabra clave que hace que una clase conserve una referencia a la clase externa es inner. Sin ella, una clase anidada se comporta como una clase estática y permanece aislada.

class Box {
    class Lid
}

fun main() {
    println(Box.Lid() != null)
}

Comprobación rápida

Compruebe su comprensión de las clases anidadas.

Resumen

Ha aprendido sobre las clases anidadas:

  • Se declaran dentro de otra clase; de forma predeterminada, class es anidada.
  • No tienen una referencia a la instancia externa; no pueden acceder a sus miembros.
  • Se crean mediante el nombre de la clase externa: Outer.Nested().
  • Son excelentes para la agrupación lógica y la creación de espacios de nombres.
class Outer {
    class Nested { val x = 1 }
}

fun main() {
    println(Outer.Nested().x)
}

Preguntas frecuentes

¿La lección «Clases anidadas» es gratis?

Sí — el texto completo de «Clases anidadas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Clases anidadas»?

Clases dentro de otras clases Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Kotlin Academy?

No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Clases anidadas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?

Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Clases anidadas
  2. Clases internas
  3. Objetos anónimos
  4. Clases locales
← Volver a Kotlin Academy