Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa Trait và Abstract Class trong Scala


Trait

Trait tương tự như interface trong Java và được tạo bằng từ khóa trait.

Abstract Class

Abstract Class tương tự như abstract class trong Java và được tạo bằng từ khóa abstract.

Ví dụ

Chương trình Scala sau minh họa cách sử dụng Trait và Abstract Class.

trait SampleTrait { 
  // Abstract method
  def test
  // Non-Abstract method
  def tutorials() { 
    println("Traits tutorials") 
  } 
} 
abstract class SampleAbstractClass { 
  // Abstract method
  def test
  // Non-abstract method
  def tutorials() { 
    println("Abstract Class tutorial") 
  } 
} 
class Tester extends SampleAbstractClass { 
  def test() { 
    println("Welcome to Tutorialspoint") 
  } 
} 
class TraitTester extends SampleTrait { 
  def test() { 
    println("Welcome to Tutorialspoint") 
  } 
} 
object HelloWorld { 
  // Main method
  def main(args: Array[String]) { 
    var obj = new Tester() 
    obj.tutorials() 
    obj.test() 
    var obj1 = new TraitTester() 
    obj1.tutorials() 
    obj1.test() 
  } 
}

Kết quả

Abstract Class tutorial Welcome to Tutorialspoint Traits tutorials Welcome to Tutorialspoint

Dưới đây là những khác biệt quan trọng giữa Trait và Abstract Class trong Scala.

STT Tiêu chí Trait Abstract Class
1 Đa kế thừa Trait hỗ trợ đa kế thừa. Abstract Class chỉ hỗ trợ đơn kế thừa.
2 Instance Trait có thể được thêm vào một instance đối tượng. Abstract class không thể được thêm vào một instance đối tượng.
3 Tham số constructor Trait không thể có tham số trong constructor. Abstract class có thể có constructor có tham số.
4 Tương tác Java Trait tương tác với Java nếu không có implementation. Abstract class tương tác với Java không có giới hạn.
5 Stackable Trait có thể xếp chồng (stackable) và liên kết động. Abstract class không stackable và liên kết tĩnh.