當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。