Classe e membros abstratos do Kotlin

Neste artigo, você aprenderá sobre a classe abstrata e como implementá-la no Kotlin (com a ajuda de exemplos).

Como o Java, a abstractpalavra-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 abstractpalavra-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 a openpalavra - 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 openpalavra-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 Personclasse.

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

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.

Artigos interessantes...