Por Lucas Trubiano - Data Engineer | Profesor y Consultor

Extender una clase

En Scala, puedes extender una clase existente para crear una nueva clase que herede sus atributos y métodos. La nueva clase se llama subclase y la clase original se llama superclase.

class Figura {
  def area: Double = 0.0
}

class Circulo(radio: Double) extends Figura {
  override def area: Double = math.Pi * radio * radio
}

val circulo = new Circulo(5.0)
println(s"Área del círculo: ${circulo.area}")

Métodos de anulación

En Scala, puedes anular (override) métodos de la superclase en la subclase para proporcionar una implementación específica. Utiliza la anotación override para indicar que estás anulando un método.

class Persona {
  def saludar(): Unit = {
    println("Hola, soy una persona.")
  }
}

class Estudiante extends Persona {

  def estudiar() = println("No quiero estudiar")
  
  override def saludar(): Unit = {
    println("Hola, soy un estudiante.")
  }
}

val persona: Persona = new Estudiante
persona.saludar()
persona.estudiar()

val estudiante: Estudiante = new Estudiante
estudiante.saludar()
estudiante.estudiar()

Tipos de Checks y Casts

En Scala, puedes realizar comprobaciones y conversiones de tipos seguras utilizando patrones de coincidencia y operadores isInstanceOf y asInstanceOf.

val valor: Any = 42
valor match {
  case x: Int => println(s"Es un entero: $x")
  case _ => println("No es un entero")
}

Operador isInstanceOf:

El operador isInstanceOf se utiliza para verificar si una instancia pertenece a una clase o a una subclase de esa clase. Devuelve true si la instancia es una instancia de la clase especificada, de lo contrario, devuelve false.

class Animal
class Perro extends Animal

val animal: Animal = new Perro

if (animal.isInstanceOf[Perro]) {
  println("Es un perro.")
} else {
  println("No es un perro.")
}

En este ejemplo, comprobamos si animal es una instancia de la clase Perro o una subclase de Perro. Como animal es una instancia de Perro, la condición se cumple y se imprime "Es un perro."

Operador asInstanceOf:

El operador asInstanceOf se utiliza para realizar una conversión explícita de tipos (casting). Puedes usarlo para convertir una referencia a un tipo más específico si estás seguro de que la conversión es segura.

class Animal
class Perro extends Animal

val animal: Animal = new Perro

val perro: Perro = animal.asInstanceOf[Perro]

println(s"Animal convertido a Perro: $perro")

En este ejemplo, convertimos la referencia animal de tipo Animal a tipo Perro utilizando asInstanceOf. Debido a que sabemos que animal realmente es un objeto Perro, la conversión es segura y se imprime "Animal convertido a Perro: Perro@..." en la salida.

Campos y métodos protegidos