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

Classes Abstratas (Abstract) no Kotlin

Neste artigo, você aprenderá sobre classes abstratas e como implementar classes abstratas em Kotlin (com exemplos).

Como no Java, a palavra-chave abstract é usada para declarar classes abstratas em Kotlin. Não é possível instanciar classes abstratas (não é possível criar objetos de classes abstratas). No entanto, você pode herdá-las.

A menos que você use explicitamente a palavra-chave abstract para torná-lo abstrato, os membros da classe abstrata (propriedades e métodos) não são abstratos. Vamos dar um exemplo:

abstract class Person {
    
    var age: Int = 40
    fun displaySSN(ssn: Int) {
        println("Meu número de seguro social é: $ssn.")
    }
    abstract fun displayJob(description: String)
}

Aqui,

  • Crie uma classe abstrata Person. Você não pode criar um objeto dessa classe.

  • A classe possui propriedades não abstratas age e métodos não abstratos displaySSN(). Se precisar sobrescrever esses membros na subclasse, use a palavra-chave open.

  • A classe possui um método abstrato displayJob(). Não há implementação, deve ser sobrescrito na subclasse.

Atenção:As classes abstratas são sempre abertas. Você não precisa usar explicitamente a palavra-chave open para herdarem subclasses delas.

Exemplo: Classes abstratas e métodos em Kotlin

abstract class Person(name: String) {
    init {
        println("Meu nome é $name.")
    }
    fun displaySSN(ssn: Int) {
        println("Meu número de seguro social é $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("Sou um professor de matemática.")
    jack.displaySSN(23123)
}

Quando o programa é executado, a saída é:

Meu nome é Jack Smith.
Sou um professor de matemática.
Meu número de seguro social é 23123.

Aqui, a classe Teacher deriva da classe abstrata Person

O objeto da classe Teacher chamado jack foi instanciado. No momento da criação do construtor primário, passamos 'Jack Smith' como parâmetro para ele. Isso executará o bloco de inicialização da classe Person.

Em seguida, chame o método displayJob() usando o objeto Jack. Observe que o método displayJob() é declarado como abstrato na classe base e overriding na classe derivada.
Por fim, chame o método displaySSN() usando o objeto Jack. Este método não é abstrato e é declarado na classe Person (não na classe Teacher).

Conhecimento Relacionado: Interfaces do Kotlin

As interfaces do Kotlin são semelhantes às classes abstratas. No entanto, as interfaces não podem armazenar estado, enquanto as classes abstratas podem.

Isso é, a interface pode ter propriedades, mas deve ser abstrata ou deve fornecer uma implementação de acessor. No entanto, as propriedades da classe abstrata não precisam ser abstratas.