Neste artigo, você aprenderá sobre a classe abstrata e como implementá-la no Kotlin (com a ajuda de exemplos).
Como o Java, a abstract
palavra-chave é usada para declarar classes abstratas em Kotlin. Uma classe abstrata não pode ser instanciada (você não pode criar objetos de uma classe abstrata). No entanto, você pode herdar subclasses deles.
Os membros (propriedades e métodos) de uma classe abstrata são não abstratos, a menos que você use explicitamente uma abstract
palavra-chave para torná-los abstratos. Vamos dar um exemplo:
classe abstrata Person (var age: Int = 40 fun displaySSN (ssn: Int) (println ("Meu SSN é $ ssn.")) abstract fun displayJob (descrição: String))
Aqui,
- uma classe abstrata
Person
é criada. Você não pode criar objetos da classe. - a classe tem uma idade de propriedade não abstrata e um método não abstrato
displaySSN()
. Se você precisar substituir esses membros na subclasse, eles devem ser marcados com aopen
palavra - chave. - A classe possui um método abstrato
displayJob()
. Ele não tem nenhuma implementação e deve ser substituído em suas subclasses.
Observação: as classes abstratas estão sempre abertas. Você não precisa usar explicitamente a open
palavra-chave para herdar subclasses deles.
Exemplo: classe e método abstratos 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) )
Quando você executa o programa, a saída será:
Meu nome é Jack Smith. Sou professor de matemática. Meu SSN é 23123.
Aqui, uma classe Teacher
é derivada de uma classe abstrata Person
.
Um objeto jack da classe do professor é instanciado. Passamos "Jack Smith"
como um parâmetro para o construtor primário ao criá-lo. Isso executa o bloco inicializador da Person
classe.
Então, o displayJob()
método é chamado usando o objeto jack. Observe que o displayJob()
método é declarado abstrato na classe base e substituído na classe derivada.
Finalmente, o displaySSN()
método é chamado usando o objeto jack. O método é não abstrato e declarado na classe Person (e não declarado na Teacher
classe).
Leitura recomendada: interfaces Kotlin
As interfaces Kotlin são semelhantes às classes abstratas. No entanto, as interfaces não podem armazenar estados, enquanto as classes abstratas podem.
Ou seja, a interface pode ter uma propriedade, mas precisa ser abstrata ou fornecer implementações de acessador. Visto que não é obrigatório que a propriedade de uma classe abstrata seja abstrata.