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