En este artículo, aprenderá sobre la clase abstracta y cómo implementarla en Kotlin (con la ayuda de ejemplos).
Al igual que Java, la abstract
palabra clave se utiliza para declarar clases abstractas en Kotlin. No se puede crear una instancia de una clase abstracta (no se pueden crear objetos de una clase abstracta). Sin embargo, puede heredar subclases de can.
Los miembros (propiedades y métodos) de una clase abstracta no son abstractos a menos que utilice explícitamente una abstract
palabra clave para hacerlos abstractos. Tomemos un ejemplo:
abstract class Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("Mi SSN es $ ssn.")) abstract fun displayJob (descripción: String))
Aquí,
Person
se crea una clase abstracta . No puede crear objetos de la clase.- la clase tiene una edad de propiedad no abstracta y un método no abstracto
displaySSN()
. Si necesita anular estos miembros en la subclase, deben marcarse con unaopen
palabra clave. - La clase tiene un método abstracto
displayJob()
. No tiene ninguna implementación y debe anularse en sus subclases.
Nota: las clases abstractas están siempre abiertas. No es necesario utilizar explícitamente la open
palabra clave para heredar subclases de ellos.
Ejemplo: método y clase abstracta de Kotlin
abstract class Person(name: String) ( init ( println("My name is $name.") ) fun displaySSN(ssn: Int) ( println("My SSN is $ssn.") ) abstract fun displayJob(description: String) ) class Teacher(name: String): Person(name) ( override fun displayJob(description: String) ( println(description) ) ) fun main(args: Array) ( val jack = Teacher("Jack Smith") jack.displayJob("I'm a mathematics teacher.") jack.displaySSN(23123) )
Cuando ejecute el programa, la salida será:
Mi nombre es Jack Smith. Soy profesor de matematicas. Mi SSN es 23123.
Aquí, una clase Teacher
se deriva de una clase abstracta Person
.
Se crea una instancia de un conector de objeto de la clase Teacher. Hemos pasado "Jack Smith"
como parámetro al constructor principal mientras lo creamos. Esto ejecuta el bloque inicializador de la Person
clase.
Luego, displayJob()
se llama al método usando el objeto jack. Tenga en cuenta que el displayJob()
método se declara abstracto en la clase base y se reemplaza en la clase derivada.
Finalmente, el displaySSN()
método se llama usando el objeto jack. El método no es abstracto y se declara en la clase Person (y no se declara en la Teacher
clase).
Lectura recomendada: Interfaces Kotlin
Las interfaces de Kotlin son similares a las clases abstractas. Sin embargo, las interfaces no pueden almacenar el estado mientras que las clases abstractas pueden.
Es decir, la interfaz puede tener propiedades, pero debe ser abstracta o debe proporcionar implementaciones de acceso. Considerando que, no es obligatorio que la propiedad de una clase abstracta sea abstracta.