Extender clase en Scala
En este artículo, aprenderemos sobre la extensión de clases en Scala.
Extender clase en Scala
En Scala, extendemos una clase para lograr una de las partes más importantes de la programación orientada a objetos (OOP): la herencia. Para extender una clase en Scala, tenemos que usar una palabra clave extender
.
Sintaxis:
derived_class_name extends base_class_name
{
}
Veamos un ejemplo para entenderlo mejor.
Código de ejemplo:
class Parent
{
var child1: String = "Tony"
var child2: String = "Nat"
}
class childOne extends Parent
{
var age = 23
var gender = "Male"
def display()
{
println("Name : " +child1)
println("Age : "+age)
println("Gender : "+gender)
}
}
class childTwo extends Parent
{
var age = 18
var gender = "Female"
def display()
{
println("Name : " +child2)
println("Age : "+age)
println("Gender : "+gender)
}
}
object myClass{
def main(args: Array[String])
{
val obj1 = new childOne()
val obj2 = new childTwo()
obj1.display()
obj2.display()
}
}
Producción :
Name : Tony
Age : 23
Gender : Male
Name : Nat
Age : 18
Gender : Female
En el código anterior, podemos observar las clases childOne
y childTwo
datos heredados de la clase base parent
.
Extender clases de casos en Scala
La clase de caso de Scala es un tipo especial de clase que es buena para modelar datos inmutables. Son muy útiles en la coincidencia de patrones.
Agregamos una palabra clave caso
antes de la clase
para convertirla en una clase de caso.
Código de ejemplo uno:
case class student (name:String, rollNo:Int)
object myClass
{
def main(args: Array[String])
{
var st = student("Tony", 33)
println("Name of the student is: " + st.name);
println("Roll number of the student is: " + st.rollNo);
}
}
Producción :
Name of the student is: Tony
Roll number of the student is: 33
Ahora veamos cómo extender o heredar estas clases de casos. A diferencia de las clases normales, aquí tenemos algunas restricciones.
Código de ejemplo dos:
case class records(schoolID: Int)
case class student (name:String, rollNo:Int) extends records
object myClass
{
def main(args: Array[String])
{
var st = student("Tony", 33)
}
}
Producción :
error: case class student has case ancestor records, but case-to-case inheritance is prohibited
El código anterior da un error porque la herencia de clase de caso a caso está prohibida en Scala. Según Scala, la clase caso
sólo puede extender una clase normal, una clase abstracta
o un rasgo
.
Código de ejemplo tres:
Aquí tratamos de extender una clase abstracta
.
abstract class records(schoolName: String)
{
def name:Unit
}
case class student (schoolName:String) extends records(schoolName)
{
override def name:Unit = println(schoolName)
}
object myClass
{
def main(args: Array[String])
{
var st = student("delhi public school")
st.name
}
}
Producción :
delhi public school
Código de ejemplo cuatro:
Aquí tratamos de extender un rasgo
.
trait information
{
def id: Int
def name: String
}
case class student (id:Int,name:String) extends information
{
println(id+" "+name)
}
object myClass
{
def main(args: Array[String])
{
val temp: information = student(230,"Tony")
}
}
Producción :
230 Tony
Conclusión
Este artículo nos enseñó cómo extender una clase en Scala; también vimos cómo extender las clases case
y observamos sus restricciones al heredar otra clase.