Podemos extender varios rasgos de Scala con una clase o una clase abstracta que se conoce como rasgo Mixins . Vale la pena saber que solo podemos extender los rasgos o la combinación de rasgos y la clase o la combinación de rasgos y la clase abstracta. Incluso es obligatorio aquí mantener la secuencia de rasgos Mixins o de lo contrario el compilador arrojará un error.
Nota:
- Los rasgos Mixins se utilizan para componer una clase.
- Una Clase difícilmente puede tener una sola superclase, pero puede tener numerosos Mixins de rasgos. La superclase y el rasgo Mixins pueden tener supertipos idénticos.
Ahora, veamos algunos ejemplos.
- Ampliación de clase abstracta con rasgo
Ejemplo:// Scala program of trait Mixins
// Trait structure
trait
Display
{
def
Display()
}
// An abstract class structure
abstract
class
Show
{
def
Show()
}
// Extending abstract class with
// trait
class
CS
extends
Show
with
Display
{
// Defining abstract class
// method
def
Display()
{
// Displays output
println(
"GeeksforGeeks"
)
}
// Defining trait method
def
Show()
{
// Displays output
println(
"CS_portal"
)
}
}
// Creating object
object
GfG
{
// Main method
def
main(args
:
Array[String])
{
// Creating object of class CS
val
x
=
new
CS()
// Calling abstract method
x.Display()
// Calling trait method
x.Show()
}
}
Producción:GeeksforGeeks CS_portal
Aquí, el orden correcto de los Mixins es que necesitamos extender cualquier clase o clase abstracta primero y luego extender cualquier rasgo usando una palabra clave con .
- Ampliación de clase abstracta sin rasgo
Ejemplo:// Scala program of trait Mixins
// Trait structure
trait
Text
{
def
txt()
}
// An abstract class structure
abstract
class
LowerCase
{
def
lowerCase()
}
// Extending abstract class
// without trait
class
Myclass
extends
LowerCase
{
// Defining abstract class
// method
def
lowerCase()
{
val
y
=
"GEEKSFORGEEKS"
// Displays output
println(y.toLowerCase())
}
// Defining trait method
def
txt()
{
// Displays output
println(
"I like GeeksforGeeks"
)
}
}
// Creating object
object
GfG
{
// Main method
def
main(args
:
Array[String])
{
// Creating object of 'Myclass'
// with trait 'Text'
val
x
=
new
Myclass()
with
Text
// Calling abstract method
x.lowerCase()
// Calling trait method
x.txt()
}
}
Producción:geeksforgeeks I like GeeksforGeeks
Por lo tanto, a partir de este ejemplo podemos decir que el rasgo puede incluso extenderse mientras se crea el objeto.
Nota: si primero extendemos un rasgo y luego la clase abstracta, el compilador arrojará un error, ya que ese no es el orden correcto de los rasgos Mixins.
Publicación traducida automáticamente
Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA