Por Lucas Trubiano - Data Engineer | Profesor y Consultor
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}")
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()
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")
}
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."
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.