Clase abstracta de Kotlin y miembros abstractos

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 abstractpalabra 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 abstractpalabra 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í,

  • Personse 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 una openpalabra 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 openpalabra 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 Teacherse 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 Personclase.

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 Teacherclase).

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.

Articulos interesantes...