Diferencia entre rasgos y clases abstractas en Scala

En Scala, una clase abstracta se construye utilizando la palabra clave abstract. Contiene métodos tanto abstractos como no abstractos y no admite herencias múltiples.
Ejemplo:

// Scala program to illustrate how to 
// create an abstract class
  
// Abstract class
abstract class Abstclass
{
      
    // Abstract and non-abstract method
    def portal
    def tutorial()
    { 
        println("Scala tutorial")
    }
  
}
  
// GFG class extends abstract class
class GFG extends Abstclass
{
    def portal()
    {
        println("Welcome!! GeeksforGeeks")
    }
}
  
object Main 
{
      
    // Main method
    def main(args: Array[String]) 
    {
        // object of GFG class
        var obj = new GFG ();
        obj.tutorial()
        obj.portal()
    }
}

Producción:

Scala tutorial
Welcome!! GeeksforGeeks

Al igual que una clase, Traits puede tener métodos (tanto abstractos como no abstractos) y campos como sus miembros. Los rasgos son como interfaces en Java. Pero son más potentes que la interfaz en Java porque en las características se nos permite implementar los miembros.
Ejemplo:

// Scala program to illustrate how to 
// create traits
  
// traits
trait mytrait
{
      
    // Abstract and non-abstract method
    def portal
    def tutorial()
    { 
        println("Scala tutorial")
    }
  
}
  
// GFG class extends trait
class GFG extends mytrait
{
    def portal()
    {
        println("Welcome!! GeeksforGeeks")
    }
}
  
object Main 
{
      
    // Main method
    def main(args: Array[String]) 
    {
          
        // object of GFG class
        var obj = new GFG ();
        obj.tutorial()
        obj.portal()
    }
}

Producción:

Scala tutorial
Welcome!! GeeksforGeeks
Rasgos Clase abstracta
Los rasgos admiten la herencia múltiple. La clase abstracta no admite la herencia múltiple.
Se nos permite agregar un rasgo a una instancia de objeto. No se nos permite agregar una clase abstracta a una instancia de objeto.
Traits no contiene parámetros de constructor. La clase abstracta contiene parámetros de constructor.
Los rasgos son completamente interoperables solo cuando no contienen ningún código de implementación. Las clases abstractas son completamente interoperables con el código Java.
Los rasgos son apilables. Por lo tanto, las súper llamadas están enlazadas dinámicamente. La clase abstracta no es apilable. Por lo tanto, las súper llamadas están enlazadas estáticamente.

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *