#Son varios conceptos que confundís (

1 messages · Page 1 of 1 (latest)

honest forge
#

Lo primero es como definimos el SmartDevice.

#

En esta captura podes ver como tengo esa clase la cual tiene 4 parametros (name, cateogry, state, type).
Pero solo 2 estan en el constructor inicial (name y category).
Siguiendo tu ejemplo le implemento un constructor secundario donde se pasa solamente el name (Por estar definido en el constrcutor original de la clase) y otro param nuevo llamado some_var.

#

El detalle importante acá es que fijate como en el constructor secundario el this (name = name) no me pide el category. Esto se debe a que lo tengo configurado en la clase como nulleable e inicializado en null.

#

Ahora implemento la clase SmartTV la cual hereda de SmartDevice. Lo importante acá es que este SmarTV implementa inicialmente el constructor secundario de SmartDevice y a su vez implementa un segundo constructor en si mismo.

#

El detalle importante acá es que en el constructor secundario NO puedo saltearme el tener que pasar los params name y state ya que estos estan definidos en el constructor original de SarmtTV y el cual a su vez esta forzado por estar heredadndo de SmartDevice de que le tenga que pasar esas dos variables (Qué SmartDevice conoce como name y some_var)

slim shadowBOT
#

Hey @honest forge, ¡has avanzando al nivel 2! picar

honest forge
#

No conozco porqué es que queres hacer ese tipo de implementación de aplicar un segundo constructor sobre un segundo constructor de la clase de la que heredas pero bueno, gusto colores. Y más en la programación.

#

Una opción que me gusta más para esa implementación es que lo hagas directamente todo en la misma definición de la clase. Como en esta imagen.

#

Por ultimo, por su quedaban dudas. Aunque en estos ejemplos estamos haciendo uso del segundo constructor de SmartDevice, nada te impide usar también el constructor principal e implementar una extención de este. Como en esta imagen.

#

Espero te sea de ayuda. Acá te dejo la clase entera para que le puedas hacer c&p y puedas probar más en detalle.

open class SmartDevice(var name: String, var category: String? = null) {
    var state: String = "ON"
    var type: String = "TIPO"

    constructor(name: String, some_var: String) : this (name = name){
        // TODO()
    }

    fun turnNn() {
        state = "ON"
    }

    fun turnOFF() {
        state = "OFF"
    }
}

class SmartTV (name: String, state: String) : SmartDevice(name = name, some_var = state) {
    constructor(name: String, state: String, codCountry: Int) : this(name = name, state = state)
}

class SmartLight (name: String, state: String, codCountry: Int) : SmartDevice(name = name, some_var = state)

class AnotherSmartLight (name: String, state: String, codCountry: Int) : SmartDevice(name = name, category = state)

tepid wigeon