Difference Between Traits and Abstract Classes in Scala

In Scala, an abstract class is constructed using the abstract keyword. It contains both abstract and non-abstract methods and cannot support multiple inheritances.
Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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()
    }
}

chevron_right


Output:

Scala tutorial
Welcome!! GeeksforGeeks

Like a class, Traits can have methods(both abstract and non-abstract), and fields as its members. Traits are just like interfaces in Java. But they are more powerful than the interface in Java because in the traits we are allowed to implement the members.
Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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()
    }
}

chevron_right


Output:

Scala tutorial
Welcome!! GeeksforGeeks
Traits Abstract Class
Traits support multiple inheritance. Abstract class does not support multiple inheritance.
We are allowed to add a trait to an object instance. We are not allowed to add an abstract class to an object instance.
Traits does not contain constructor parameters. Abstract class contain constructor parameters.
Traits are completely interoperable only when they do not contain any implementation code. Abstract class are completely interoperable with Java code.
Traits are stackable. So, super calls are dynamically bound. Abstract class is not stackable. So, super calls are statically bound.


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.