当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala Traits和Abstract的区别用法及代码示例


在 Scala 中,一个抽象类是使用abstract关键字构造的。它同时包含抽象和非抽象方法,并且不支持多重继承。
例子:


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

输出:

Scala tutorial
Welcome!! GeeksforGeeks

就像上课一样,特性可以有方法(抽象和非抽象)和字段作为其成员。 Traits 就像 Java 中的接口一样。但它们比 Java 中的接口更强大,因为在特征中我们可以实现成员。
例子:


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

输出:

Scala tutorial
Welcome!! GeeksforGeeks
特性 抽象类
特征支持多重继承。 抽象类不支持多重继承。
我们可以向对象实例添加特征。 我们不允许向对象实例添加抽象类。
Traits 不包含构造函数参数。 抽象类包含构造函数参数。
仅当特征不包含任何实现代码时,它们才完全可互操作。 抽象类与 Java 代码完全可互操作。
特质是可以叠加的。因此,超级调用是动态绑定的。 抽象类是不可堆叠的。因此,超级调用是静态绑定的。


相关用法


注:本文由纯净天空筛选整理自ankita_saini大神的英文原创作品 Difference Between Traits and Abstract Classes in Scala。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。