Kotlin - Clase y objeto

En este capítulo, aprenderemos los conceptos básicos de la programación orientada a objetos (OOP) usando Kotlin. Aprenderemos sobre la clase y su objeto y cómo jugar con ese objeto. Por definición de OOP, una clase es un modelo de una entidad en tiempo de ejecución y el objeto es su estado, que incluye tanto su comportamiento como su estado. En Kotlin, la declaración de clase consta de un encabezado de clase y un cuerpo de clase rodeado de llaves, similar a Java.

Class myClass { // class Header 

   // class Body
}

Al igual que Java, Kotlin también permite crear varios objetos de una clase y usted es libre de incluir sus miembros de clase y funciones. Podemos controlar la visibilidad de las variables de los miembros de la clase utilizando diferentes palabras clave que aprenderemos en el Capítulo 10 - Control de visibilidad. En el siguiente ejemplo, crearemos una clase y su objeto a través del cual accederemos a diferentes miembros de datos de esa clase.

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()
}

El fragmento de código anterior producirá la siguiente salida en el navegador, donde estamos llamando a printMe () de myClass usando su propio objeto.

You are at the best Learning website Named- Tutorials.point

Clase anidada

Por definición, cuando una clase se ha creado dentro de otra clase, se llama como una clase anidada. En Kotlin, la clase anidada es estática por defecto, por lo tanto, se puede acceder sin crear ningún objeto de esa clase. En el siguiente ejemplo, veremos cómo Kotlin interpreta nuestra clase anidada.

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"
   }
}

El fragmento de código anterior producirá el siguiente resultado en el navegador.

Welcome to The TutorialsPoint.com

Clase interior

Cuando una clase anidada se marca como "interna", se llamará como una clase interna. El miembro de datos de la clase externa puede acceder a una clase interna. En el siguiente ejemplo, accederemos al miembro de datos de la clase 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
   }
}

El fragmento de código anterior producirá el siguiente resultado en el navegador, donde llamamos a la clase anidada utilizando el constructor predeterminado proporcionado por los compiladores de Kotlin en el momento de la compilación.

Welcome to the TutorialsPoint.com

Clase interna anónima

La clase interna anónima es un concepto bastante bueno que hace la vida de un programador muy fácil. Siempre que estamos implementando una interfaz, el concepto de bloque interno anónimo entra en escena. El concepto de crear un objeto de interfaz utilizando una referencia de objeto en tiempo de ejecución se conoce como clase anónima. En el siguiente ejemplo, crearemos una interfaz y crearemos un objeto de esa interfaz usando el mecanismo de clase 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()
}

El fragmento de código anterior producirá el siguiente resultado en el navegador.

I am an example of Anonymous Inner Class

Alias ​​de tipo

Los alias de tipo son una propiedad del compilador de Kotlin. Proporciona la flexibilidad de crear un nuevo nombre de un tipo existente, no crea un nuevo tipo. Si el nombre del tipo es demasiado largo, puede introducir fácilmente un nombre más corto y usar el mismo para uso futuro. Los alias de tipo son realmente útiles para tipos complejos. En la última versión, Kotlin revocó la compatibilidad con los alias de tipo, sin embargo, si está utilizando una versión antigua de Kotlin, es posible que la haya utilizado de la siguiente manera:

typealias NodeSet = Set<Network.Node>
typealias FileTable<K> = MutableMap<K, MutableList<File>>