{"id":356,"date":"2023-09-04T11:19:22","date_gmt":"2023-09-04T11:19:22","guid":{"rendered":"http:\/\/javigomez.org\/?p=356"},"modified":"2025-09-29T20:34:09","modified_gmt":"2025-09-29T20:34:09","slug":"03-kotlin-clases","status":"publish","type":"post","link":"https:\/\/javigomez.org\/index.php\/2023\/09\/04\/03-kotlin-clases\/","title":{"rendered":"04. Kotlin \u2013 Clases"},"content":{"rendered":"\n<p><strong>1. Clases y Constructores<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Person {\n    var alive: Boolean = true\n\n    fun die(){\n        alive=false\n    }\n}\n\nfun main(){\n    var a:Person = Person()\n    println(a.alive)\n    a.die()\n    println(a.alive)\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Constructor primario:<\/strong><\/p>\n\n\n\n<p>El constructor primario se define directamente en la declaraci\u00f3n de la clase. Puede incluir par\u00e1metros y se utiliza para inicializar los atributos de la clase.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Persona(val nombre: String, val edad: Int) {\n    \/\/ C\u00f3digo adicional de la clase\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Constructor secundario:<\/strong> Adem\u00e1s del constructor primario, Kotlin tambi\u00e9n permite definir constructores secundarios en la clase. Los constructores secundarios se crean utilizando la palabra clave constructor y pueden proporcionar diferentes formas de inicializar un objeto.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Persona {\n    var nombre: String = \"\"\n    var edad: Int = 0\n\n    constructor(nombre: String, edad: Int) {\n        this.nombre = nombre\n        this.edad = edad\n    }\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>class Person(var name:String, var passport: String?) {\n    var alive: Boolean = true\n\n    fun die(){\n        alive=false;\n    }\n}\n\nvar javi:Person = Person(\"Javi\",\"A123456\")\n        javi.die()\n        println(javi.name)\n        println(javi.passport)\n        println(javi.alive)\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>class Person(var name:String = \"Anonimo\", var passport: String? = null) {\n    var alive: Boolean = true\n\n    fun die(){\n        alive=false;\n    }\n}\n\nvar javi:Person = Person(\"Javi\",\"A123456\")\n        javi.die()\n        println(javi.name) \/\/Javi\n        println(javi.passport) \/\/A123456\n        println(javi.alive) \/\/false\n\n        var maria:Person = Person()\n        println(maria.name) \/\/Anonimo\n        println(maria.passport) \/\/null\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 01 Clases y Constructores\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/RHw9cPCsRyE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>2. get y set<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Pokemon ( var n:String = \"Pok\")  {\n\n    private var name:String = n\n    private var attackPower: Float = 50f\n\n    constructor(n: String, aP: Float) : this() {\n        this.name=n\n        this.attackPower=aP\n    }\n    fun getName():String {return this.name}\n    fun getAttackPower():Float {return this.attackPower}\n\n    fun setName(n:String) {this.name=n}\n    fun setAttackPower(a:Float) {this.attackPower=a}\n}\n\nfun main(){\n    var b1: Pokemon=Pokemon()\n    println(b1.getName())\n    println(b1.getAttackPower())\n\n    var b2:Pokemon=Pokemon(\"P1\")\n    println(b2.getName())\n    println(b2.getAttackPower())\n\n    var b3:Pokemon=Pokemon(\"P2\",99f)\n    println(b3.getName())\n    println(b3.getAttackPower())\n    b3.setName(\"P99\")\n    println(b3.getName())\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 02 Get y Set\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/seQcojiRJ4g?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>3. Herencia y Polimorfismo<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>open class Animal(val nombre: String, val edad: Int) {\n    open fun hacerSonido() {\n        println(\"El animal hace un sonido.\")\n    }\n}\n\nclass Perro(nombre: String, edad: Int) : Animal(nombre, edad) {\n    override fun hacerSonido() {\n        println(\"El perro ladra.\")\n    }\n}\n\nclass Gato(nombre: String, edad: Int) : Animal(nombre, edad) {\n    override fun hacerSonido() {\n        println(\"El gato maulla.\")\n    }\n}\n\nfun main() {\n    val perro = Perro(\"Fido\", 3)\n    val gato = Gato(\"Pelusa\", 2)\n\n    perro.hacerSonido() \/\/ Imprime \"El perro ladra.\"\n    gato.hacerSonido() \/\/ Imprime \"El gato maulla.\"\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Herencia<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> open class Person(var name:String = \"Anonimo\", var passport: String? = null) {\n    var alive: Boolean = true\n\n    fun die(){\n        alive=false;\n    }\n}\n\nclass Athlete(name:String, passport:String, var sport:String):Person(name,passport)\n\n var pele:Athlete= Athlete(\"Pele\",\"A3333\",\"Futbol\")\n        println(pele.name) \/\/Pele\n        println(pele.passport) \/\/A3333\n        println(pele.sport) \/\/Futbol\n        println(pele.alive) \/\/true\n        pele.die()\n        println(pele.alive) \/\/false\n<\/code><\/pre>\n\n\n\n<p><strong>Super <\/strong><\/p>\n\n\n\n<p>La palabra clave super se utiliza en la herencia para hacer referencia a la implementaci\u00f3n de un m\u00e9todo o propiedad en la clase base. Permite acceder y llamar a la implementaci\u00f3n de la clase base desde una clase derivada.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>open class Animal {\n    open fun hacerSonido() {\n        println(\"El animal hace un sonido.\")\n    }\n}\n\nclass Perro : Animal() {\n    override fun hacerSonido() {\n        super.hacerSonido() \/\/ Llama a la implementaci\u00f3n de hacerSonido() de la clase base\n        println(\"Adem\u00e1s, el perro ladra.\")\n    }\n}\n\nfun main() {\n    val perro = Perro()\n    perro.hacerSonido()\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 03 Herencia y Polimorfismo\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/BxJTyRczk-A?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>4. Clases abstractas<\/strong><\/p>\n\n\n\n<p>En Kotlin, una clase abstracta es una clase que no se puede instanciar directamente, pero que sirve como base para otras clases. Puede contener tanto m\u00e9todos abstractos como m\u00e9todos concretos. Una clase abstracta se declara utilizando la palabra clave abstract<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>abstract class Figura {\n    abstract fun calcularArea(): Double\n\n    fun imprimirDescripcion() {\n        println(\"Esta es una figura.\")\n    }\n}\n\nclass Rectangulo(val base: Double, val altura: Double) : Figura() {\n    override fun calcularArea(): Double {\n        return base * altura\n    }\n}\n\nfun main() {\n    val rectangulo = Rectangulo(5.0, 3.0)\n    rectangulo.imprimirDescripcion()\n    val area = rectangulo.calcularArea()\n    println(\"El \u00e1rea del rect\u00e1ngulo es: $area\")\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 04 Abstractas\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/6XA_Qey1U4o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>5. Interfaces<\/strong><\/p>\n\n\n\n<p>Una interfaz es una estructura que define un conjunto de m\u00e9todos y propiedades que deben ser implementados por las clases que la implementen. Una interfaz se declara utilizando la palabra clave interface. En Kotlin no hay multiherencia, pero una clase puede heredar de diferentes interfaces, o de una clase e interfaces<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Vehiculo {\n    fun acelerar()\n    fun frenar()\n}\n\nclass Coche : Vehiculo {\n    override fun acelerar() {\n        println(\"El coche est\u00e1 acelerando.\")\n    }\n\n    override fun frenar() {\n        println(\"El coche est\u00e1 frenando.\")\n    }\n}\nclass Moto : Vehiculo {\n    override fun acelerar() {\n        println(\"La moto est\u00e1 acelerando.\")\n    }\n\n    override fun frenar() {\n        println(\"La moto est\u00e1 frenando.\")\n    }\n}\n\nfun main() {\n    val coche = Coche()\n    val moto = Moto()\n\n    coche.acelerar()\n    coche.frenar()\n\n    moto.acelerar()\n    moto.frenar()\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>interface Figura {\n    val color: String \/\/ Propiedad abstracta\n\n    fun calcularArea(): Double \/\/ M\u00e9todo abstracto\n\n    fun dibujar() { \/\/ M\u00e9todo concreto\n        println(\"Dibujando la figura...\")\n    }\n}\n\nclass Rectangulo(override val color: String, val base: Double, val altura: Double) : Figura {\n    override fun calcularArea(): Double {\n        return base * altura\n    }\n}\n\nclass Circulo(override val color: String, val radio: Double) : Figura {\n    override fun calcularArea(): Double {\n        return Math.PI * radio * radio\n    }\n}\n\nfun main() {\n    val rectangulo = Rectangulo(\"Rojo\", 5.0, 3.0)\n    val circulo = Circulo(\"Azul\", 2.5)\n\n    rectangulo.dibujar()\n    println(\"El \u00e1rea del rect\u00e1ngulo es: ${rectangulo.calcularArea()}, color: ${rectangulo.color}\")\n\n    circulo.dibujar()\n    println(\"El \u00e1rea del c\u00edrculo es: ${circulo.calcularArea()}, color: ${circulo.color}\")\n}\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 05 Interfaces\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/9kM497xMcHk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>6. Clases como propiedad<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Persona {\n        var nombre: String = \"\"\n        var direccion: Direccion = Direccion()\n    }\n\n    class Direccion {\n        var calle: String = \"\"\n        var ciudad: String = \"\"\n        var codigoPostal: String = \"\"\n        fun mostrarDir(){\n            println(\"Direccion: ${this.calle}, ${this.ciudad}, ${this.codigoPostal}\")\n        }\n    }\n\n    fun main() {\n        val persona = Persona()\n        persona.nombre = \"Juan\"\n        persona.direccion.calle = \"Calle Principal\"\n        persona.direccion.ciudad = \"Ciudad Ejemplo\"\n        persona.direccion.codigoPostal = \"12345\"\n\n        println(\"Nombre: ${persona.nombre}\")\n        persona.direccion.mostrarDir()\n        println(\"Direcci\u00f3n: ${persona.direccion.calle}, ${persona.direccion.ciudad}, ${persona.direccion.codigoPostal}\")\n    }\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 06 Clase como propiedad\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/cdWdzeTtJMI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>7. Clases anidades e inner<\/strong><\/p>\n\n\n\n<p><strong>Clases anidadas:<\/strong><\/p>\n\n\n\n<p>Una clase anidada est\u00e1 completamente contenida dentro de la clase externa.<\/p>\n\n\n\n<p>No tiene acceso a los miembros no est\u00e1ticos de la clase externa a menos que se cree una instancia de la clase externa.<\/p>\n\n\n\n<p>No tiene acceso a la referencia this de la clase externa.<\/p>\n\n\n\n<p>No necesita una instancia de la clase externa para ser instanciada.<\/p>\n\n\n\n<p>Por defecto, es una clase est\u00e1tica, lo que significa que no tiene acceso a los miembros no est\u00e1ticos de la clase externa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ClaseExterna {\n    private val mensajeExterno = \"Mensaje desde la clase externa\"\n\n    class ClaseAnidada {\n        fun imprimirMensaje() {\n            println(\"Mensaje desde la clase anidada\")\n        }\n    }\n}\n\nfun main() {\n    val claseAnidada = ClaseExterna.ClaseAnidada()\n    claseAnidada.imprimirMensaje()\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Clases internas (<\/strong><strong>inner<\/strong><strong> <\/strong><strong>classes<\/strong><strong>):<\/strong><\/p>\n\n\n\n<p>Una clase interna est\u00e1 asociada a una instancia espec\u00edfica de la clase externa.<\/p>\n\n\n\n<p>Puede acceder a los miembros no est\u00e1ticos de la clase externa, incluso a los privados.<\/p>\n\n\n\n<p>Tiene acceso a la referencia this de la clase externa.<\/p>\n\n\n\n<p>Necesita una instancia de la clase externa para ser instanciada.<\/p>\n\n\n\n<p>Se declara utilizando la palabra clave inner.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class ClaseExterna {\n    private val mensajeExterno = \"Mensaje desde la clase externa\"\n\n    inner class ClaseInterna {\n        fun imprimirMensaje() {\n            println(\"Mensaje desde la clase interna: $mensajeExterno\")\n        }\n    }\n}\n\nfun main() {\n    val claseExterna = ClaseExterna()\n    val claseInterna = claseExterna.ClaseInterna()\n    claseInterna.imprimirMensaje()\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>class SubClasses {\n        private var name=\"PADRE\"\n        fun presentar(): String { return this.name}\n\n    class Anidada{\n        private val nameAnidada = \"ANIDADA\"\n        fun presentar(): String {return this.nameAnidada}\n    }\n\n    inner class Interna{\n        private val nameInterna=\"INTERNA\"\n        fun presentar(): String {return \"Hola, soy ${this.nameInterna}, hija de ${name}\"}\n    }\n}\n\n    fun main() {\n        var ani=SubClasses.Anidada()\n        println(ani.presentar())\n\n        var inn=SubClasses().Interna()\n        println(inn.presentar())\n\n        var sc:SubClasses=SubClasses()\n        println(sc.presentar())\n }\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 07 Anidadas e Inner\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/P69oU6el3CU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>8. Objeto an\u00f3nimos<\/strong><\/p>\n\n\n\n<p>Te permite crear una instancia de un objeto con su propia implementaci\u00f3n de m\u00e9todos y propiedades sin definir una clase separada.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun main() {\n    val persona = object {\n        var nombre: String = \"Juan\"\n        var edad: Int = 30\n\n        fun saludar() {\n            println(\"\u00a1Hola! Mi nombre es $nombre y tengo $edad a\u00f1os.\")\n        }\n    }\n\n    persona.saludar()\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>object ff{\n        var apodo=\"Fer\"\n        fun saludo(){println(\"Hola, me llaman $apodo\")}\n    }\n\n    fun main() {\n        ff.saludo()\n        ff.apodo=\"FFF\"\n        ff.saludo()\n     }\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 08 Anominos\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/bt-yg3AwUYc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><strong>9. Data class<\/strong><\/p>\n\n\n\n<p>Una data class es una clase especializada que se utiliza principalmente para representar datos. Proporciona autom\u00e1ticamente una implementaci\u00f3n predeterminada de ciertos m\u00e9todos, como toString(), equals(), hashCode(),<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class Persona(val nombre: String, val edad: Int)\nfun main() {\n    val persona = Persona(\"Juan\", 30)\n    println(persona.nombre) \/\/ Imprime \"Juan\"\n    println(persona.edad) \/\/ Imprime 30\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>data class Persona(val nombre: String, val edad: Int)\nfun main() {\n    val persona = Persona(\"Juan\", 30)\n    val (nombre, edad) = persona\n    println(nombre) \/\/ Imprime \"Juan\"\n    println(edad) \/\/ Imprime 30\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>data class Superhero(\n        var superhero:String,\n        var publisher:String,\n        var realName:String,\n        var photo:String\n)\nvar superheros:MutableList&lt;Superhero&gt; = mutableListOf()\n       superheros.add(Superhero(&quot;Spiderman&quot;, &quot;Marvel&quot;, &quot;Peter Parker&quot;, &quot;https:\/\/javigomez.org\/ESIC\/spiderman.jpg%22)\n       superheros.add(Superhero(&quot;Daredevil&quot;, &quot;Marvel&quot;, &quot;Matthew Michael Murdock&quot;, &quot;https:\/\/javigomez.org\/ESIC\/daredevil.jpg%22)\n       superheros.add(Superhero(&quot;Wolverine&quot;, &quot;Marvel&quot;, &quot;James Howlett&quot;, &quot;https:\/\/javigomez.org\/ESIC\/logan.jpeg%22)\n       superheros.add(Superhero(&quot;Batman&quot;, &quot;DC&quot;, &quot;Bruce Wayne&quot;, &quot;https:\/\/javigomez.org\/ESIC\/batman.jpg%22)\n       superheros.add(Superhero(&quot;Thor&quot;, &quot;Marvel&quot;, &quot;Thor Odinson&quot;, &quot;https:\/\/javigomez.org\/ESIC\/thor.jpg%22)\n       superheros.add(Superhero(&quot;Flash&quot;, &quot;DC&quot;, &quot;Jay Garrick&quot;, &quot;https:\/\/javigomez.org\/ESIC\/flash.png%22)\n       superheros.add(Superhero(&quot;Green Lantern&quot;, &quot;DC&quot;, &quot;Alan Scott&quot;, &quot;https:\/\/javigomez.org\/ESIC\/green-lantern.jpg%22)\n       superheros.add(Superhero(&quot;Wonder Woman&quot;, &quot;DC&quot;, &quot;Princess Diana&quot;, &quot;https:\/\/javigomez.org\/ESIC\/wonder_woman.jpg%22)\n<\/code><\/pre>\n\n\n\n<p><strong>10. enum class<\/strong><\/p>\n\n\n\n<p>Un enum (enumeraci\u00f3n) es una forma de definir un tipo de datos que representa un conjunto fijo de valores constantes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum class DiaSemana {\n    LUNES,\n    MARTES,\n    MI\u00c9RCOLES,\n    JUEVES,\n    VIERNES,\n    S\u00c1BADO,\n    DOMINGO\n}\nfun main() {\n    val dia = DiaSemana.MI\u00c9RCOLES\n    println(\"Hoy es $dia\") \/\/ Imprime \"Hoy es MI\u00c9RCOLES\"\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>fun obtenerMensaje(dia: DiaSemana): String {\n    return when (dia) {\n        DiaSemana.LUNES -&gt; \"\u00a1\u00c1nimo, es lunes!\"\n        DiaSemana.VIERNES -&gt; \"\u00a1Por fin es viernes!\"\n        else -&gt; \"Es otro d\u00eda de la semana\"\n    }\n}\n\nfun main() {\n    val dia = DiaSemana.LUNES\n    val mensaje = obtenerMensaje(dia)\n    println(mensaje) \/\/ Imprime \"\u00a1\u00c1nimo, es lunes!\"\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>enum class dias {\n    LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO;\n\n    fun saludo():String{\n        when (this){\n            LUNES-&gt;return \"Ya es lunes\"\n            MARTES-&gt;return \"Es martes\"\n            MIERCOLES-&gt; return \"Mitad\"\n            JUEVES-&gt; return \"Juernes\"\n            VIERNES-&gt; return \"Viernes por fin\"\n            else -&gt; return \"Fin de semana\"\n        }\n    }\n}\n\nvar hoy:dias=dias.MARTES\n\n        var semana = dias.values()\n        for (i in semana)  println(i)\n\n        println(dias.valueOf(\"MIERCOLES\")) \/\/MIERCOLES\n        println(hoy.name) \/\/MARTES\n        println(hoy.ordinal)\/\/1\n        println(hoy.saludo()) \/\/Es martes\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>enum class dias (val laboral:Boolean, val jornada:Int){\n    LUNES(true,8), MARTES(true,8), MIERCOLES(true,8),\n    JUEVES(true,8), VIERNES(true,6),\n    SABADO(false,0), DOMINGO(false,0);\n\n    fun saludo():String{\n        when (this){\n            LUNES-&gt;return \"Ya es lunes\"\n            MARTES-&gt;return \"Es martes\"\n            MIERCOLES-&gt; return \"Mitad\"\n            JUEVES-&gt; return \"Juernes\"\n            VIERNES-&gt; return \"Viernes por fin\"\n            else -&gt; return \"Fin de semana\"\n        }\n    }\n\n        var hoy:dias=dias.MARTES\n\n        var semana = dias.values()\n        for (i in semana)  println(i)\n\n        println(dias.valueOf(\"MIERCOLES\")) \/\/MIERCOLES\n        println(hoy.name) \/\/MARTES\n        println(hoy.ordinal)\/\/1\n        println(hoy.saludo()) \/\/Es martes\n<strong>        println(hoy.laboral) \/\/true\n        println(hoy.jornada) \/\/8<\/strong><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Kotlin U04 10 Enum\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/0pD3dDOH-CQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>1. Clases y Constructores Constructor primario: El constructor primario se define directamente en la declaraci\u00f3n de la clase. Puede incluir par\u00e1metros y se utiliza para &hellip; <\/p>\n","protected":false},"author":1,"featured_media":347,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[80,81,109,133,184,195,201,212,244,264,317],"class_list":["post-356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kotlin","tag-clases-abstractas","tag-clases-anidadas","tag-dataclass","tag-enum","tag-herencia","tag-inner-class","tag-interfaces","tag-kotlin","tag-objetos-anonimos","tag-polimorfismo","tag-super"],"_links":{"self":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts\/356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/comments?post=356"}],"version-history":[{"count":1,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts\/356\/revisions"}],"predecessor-version":[{"id":943,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts\/356\/revisions\/943"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/media\/347"}],"wp:attachment":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/media?parent=356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/categories?post=356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/tags?post=356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}