English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este artículo, aprenderá sobre las clases abstractas y cómo implementarlas en Kotlin (con ejemplos).
Como en Java, la palabra clave abstract se utiliza para declarar clases abstractas en Kotlin. No se puede instanciar una clase abstracta (no se puede crear un objeto de clase abstracta). Sin embargo, se pueden heredar subclases de ellas.
A menos que se utilice explícitamente la palabra clave abstract para hacerla abstracta, los miembros de la clase abstracta (propiedades y métodos) no son abstractos. Vamos a dar un ejemplo:
abstract class Person { var age: Int = 40 fun displaySSN(ssn: Int) { println("Mi número de seguro social es: $ssn.") } abstract fun displayJob(description: String) }
Aquí,
Cree una clase abstracta Person. No se puede crear un objeto de esta clase.
La clase tiene propiedades no abstractas age y métodos no abstractos displaySSN(). Si necesita sobrescribir estos miembros en la subclase, debe marcarlos con la palabra clave open.
La clase tiene un método abstracto displayJob(). No tiene ninguna implementación y debe ser reescrito en su subclase.
Nota:Las clases abstractas siempre son abiertas. No es necesario usar explícitamente la palabra clave open para heredar subclases de ellas.
abstract class Person(name: String) { init { println("Mi nombre es $name.") } fun displaySSN(ssn: Int) { println("Mi número de seguro social es $ssn.") } abstract fun displayJob(description: String) } class Teacher(name: String): Person(name) { override fun displayJob(description: String) { println(description) } } fun main(args: Array<String>) { val jack = Teacher("Jack Smith") jack.displayJob("Soy un profesor de matemáticas.") jack.displaySSN(23123) }
Al ejecutar el programa, la salida es:
Mi nombre es Jack Smith. Soy un profesor de matemáticas. Mi número de seguro social es 23123.
Aquí, la clase Teacher se deriva de la clase abstracta Person
El objeto de la clase Teacher jack se ha instanciado. Al crear el constructor principal, le pasamos el parámetro 'Jack Smith'. Esto ejecutará el bloque de inicialización de la clase Person.
Luego, utilice el objeto Jack para llamar al método displayJob(). Note que el método displayJob() se declara como abstracto en la clase base y se sobrescribe en la clase derivada.
Finalmente, utilice el objeto Jack para llamar al método displaySSN(). Este método no es abstracto y se declara en la clase Person (no en la clase Teacher).
Conocimientos relacionados: Interfaces de Kotlin
Las interfaces de Kotlin son similares a las clases abstractas. Sin embargo, las interfaces no pueden almacenar estado, mientras que las clases abstractas pueden.
Es decir, la interfaz puede tener propiedades, pero debe ser abstracta o debe proporcionar una implementación de acceso. Sin embargo, las propiedades de la clase abstracta no necesitan ser abstractas.