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