Kotlin - Classe e Objeto
Neste capítulo, aprenderemos os fundamentos da Programação Orientada a Objetos (OOP) usando Kotlin. Vamos aprender sobre a classe e seu objeto e como brincar com esse objeto. Por definição de OOP, uma classe é um projeto de uma entidade de tempo de execução e o objeto é seu estado, que inclui seu comportamento e estado. Em Kotlin, a declaração de classe consiste em um cabeçalho de classe e um corpo de classe cercado por chaves, semelhante a Java.
Class myClass { // class Header
// class Body
}
Assim como o Java, o Kotlin também permite criar vários objetos de uma classe e você é livre para incluir seus membros e funções de classe. Podemos controlar a visibilidade das variáveis dos membros da classe usando diferentes palavras-chave que aprenderemos no Capítulo 10 - Controle de visibilidade. No exemplo a seguir, criaremos uma classe e seu objeto por meio do qual acessaremos diferentes membros de dados dessa classe.
class myClass {
// property (data member)
private var name: String = "Tutorials.point"
// member function
fun printMe() {
print("You are at the best Learning website Named-"+name)
}
}
fun main(args: Array<String>) {
val obj = myClass() // create obj object of myClass class
obj.printMe()
}
O trecho de código acima produzirá a seguinte saída no navegador, onde estamos chamando printMe () de myClass usando seu próprio objeto.
You are at the best Learning website Named- Tutorials.point
Classe Aninhada
Por definição, quando uma classe é criada dentro de outra classe, ela é chamada como uma classe aninhada. No Kotlin, a classe aninhada é estática por padrão, portanto, pode ser acessada sem criar nenhum objeto dessa classe. No exemplo a seguir, veremos como Kotlin interpreta nossa classe aninhada.
fun main(args: Array<String>) {
val demo = Outer.Nested().foo() // calling nested class method
print(demo)
}
class Outer {
class Nested {
fun foo() = "Welcome to The TutorialsPoint.com"
}
}
O trecho de código acima produzirá a seguinte saída no navegador.
Welcome to The TutorialsPoint.com
Classe Interna
Quando uma classe aninhada é marcada como “interna”, ela será chamada de classe interna. Uma classe interna pode ser acessada pelo membro de dados da classe externa. No exemplo a seguir, iremos acessar o membro de dados da classe externa.
fun main(args: Array<String>) {
val demo = Outer().Nested().foo() // calling nested class method
print(demo)
}
class Outer {
private val welcomeMessage: String = "Welcome to the TutorialsPoint.com"
inner class Nested {
fun foo() = welcomeMessage
}
}
O trecho de código acima produzirá a seguinte saída no navegador, em que chamamos a classe aninhada usando o construtor padrão fornecido pelos compiladores Kotlin no momento da compilação.
Welcome to the TutorialsPoint.com
Classe interna anônima
Classe interna anônima é um conceito muito bom que torna a vida de um programador muito fácil. Sempre que estamos implementando uma interface, o conceito de bloqueio interno anônimo vem à tona. O conceito de criar um objeto de interface usando referência de objeto em tempo de execução é conhecido como classe anônima. No exemplo a seguir, vamos criar uma interface e vamos criar um objeto dessa interface usando o mecanismo da classe Anonymous Inner.
fun main(args: Array<String>) {
var programmer :Human = object:Human // creating an instance of the interface {
override fun think() { // overriding the think method
print("I am an example of Anonymous Inner Class ")
}
}
programmer.think()
}
interface Human {
fun think()
}
O trecho de código acima produzirá a seguinte saída no navegador.
I am an example of Anonymous Inner Class
Digite aliases
Os aliases de tipo são propriedade do compilador Kotlin. Ele fornece a flexibilidade de criar um novo nome de um tipo existente, mas não cria um novo tipo. Se o nome do tipo for muito longo, você pode facilmente introduzir um nome mais curto e usar o mesmo para uso futuro. Os aliases de tipo são realmente úteis para tipos complexos. Na versão mais recente, Kotlin revogou o suporte para aliases de tipo, no entanto, se você estiver usando uma versão antiga do Kotlin, você pode ter usado como o seguinte -
typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>