English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Classe astratta (Abstract) in Kotlin

In questo articolo, imparerai le classi astratte e come implementarle in Kotlin (attraverso esempi).

Come in Java, la parola chiave abstract viene utilizzata per dichiarare classi astratte in Kotlin. Non è possibile istanziare classi astratte (non è possibile creare oggetti di classi astratte). Ma è possibile derivare classi figlie da esse.

Come in Java, la parola chiave abstract viene utilizzata per dichiarare classi astratte in Kotlin. Non è possibile istanziare classi astratte (non è possibile creare oggetti di classi astratte). Tuttavia, è possibile derivare classi figlie da esse.

abstract class Person {
    
    var age: Int = 40
    fun displaySSN(ssn: Int) {
        println("Il mio numero di assicurazione sociale è: $ssn.")
    }
    abstract fun displayJob(description: String)
}

Ecco qui,

  • Creare una classe astratta Person. Non è possibile creare un oggetto di questa classe.

  • Questa classe ha attributi non astratti come age e metodi non astratti come displaySSN(). Se si desidera sovrascrivere questi membri nella classe figlia, è necessario marchiarli con la parola chiave open.

  • Questa classe ha un metodo astratto displayJob(). Non ha alcuna implementazione e deve essere sovrascritto nella classe figlia.

Attenzione:Le classi astratte sono sempre aperte. Non è necessario utilizzare esplicitamente la parola chiave open per derivare classi figlie da esse.

Esempio: Classi astratte e metodi in Kotlin

abstract class Person(name: String) {
    init {
        println("Il mio nome è $name.")
    }
    fun displaySSN(ssn: Int) {
        println("Il mio numero di assicurazione sociale è $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("Sono un insegnante di matematica.")
    jack.displaySSN(23123)
}

Quando si esegue il programma, l'output è:

Il mio nome è Jack Smith.
Sono un insegnante di matematica.
Il mio numero di assicurazione sociale è 23123.

In questo caso, la classe Teacher deriva dall'astratta classe Person

L'oggetto della classe Teacher chiamato jack è istanzionato. Durante la creazione del costruttore principale, passiamo a lui il parametro “Jack Smith”. Questo esegue l'inizializzazione del blocco Person della classe.

Poi, chiamare il metodo displayJob() utilizzando l'oggetto Jack. Notare che il metodo displayJob() è dichiarato come astratto nella classe base e overridden nella classe derivata.
Infine, chiamare il metodo displaySSN() utilizzando l'oggetto Jack. Il metodo non è astratto e viene dichiarato nella classe Person (non nella classe Teacher).

Conoscenze correlate: Interfaccia Kotlin

L'interfaccia Kotlin è simile all'astratto. Tuttavia, l'interfaccia non può memorizzare stato, mentre l'astratto può.

Quindi, l'interfaccia può avere proprietà, ma deve essere astratta o deve fornire un'implementazione degli accessori. Tuttavia, le proprietà dell'astratto non devono necessariamente essere astratte.