Scala – Abstract class

Class được khai báo sử dụng từ khoá abstract được hiểu là một abstract class. Abstract class có thể có các phương thức hoặc phương thức non-abstract. Abstract class thường được sử dụng để đạt được tính trừu tượng. Tính trừu tượng là một quá trình trong đó chúng ta ẩn đi các chi tiết thực thi phức tạp và chỉ hiển thị các chức năng cho người dùng.

Trong Scala, chúng ta có thể đạt được tính trừu tượng bằng cách sử dụng abstract class và trait. Chúng ta sẽ trình bày chi tiết hơn ngay sau đây

Ví dụ Abstract Class

Trong ví dụ này chúng ta sẽ tạo một abstract class Bike. Nó sẽ chứa một abstract phương thức. Class Hero sẽ extends từ nó và cung cấp thực thi khi chạy phương thức.

Một class mà extend abstract class thì phải cung cấp thực thi cho tất các các phương thức trong abstract class. Chúng ta sẽ không thể tạo một object cho abstract class.

abstract class Bike{  
    def run()  
}  
  
class Hero extends Bike{  
    def run(){  
        println("running fine...")  
    }  
}  
  
object MainObject{  
    def main(args: Array[String]){  
        var h = new Hero()  
        h.run()  
    }  
}

Kết quả

running fine...

Constructor, biến và phương thức

Sau đây là ví dụ về abstract class dùng constructor, phương thức và biến.

abstract class Bike(a:Int){             // Tạo constructor  
    var b:Int = 20                      // Tạo các biến  
    var c:Int = 25  
    def run()                           // phương thức  
    def performance(){                  // Phương thức non-abstract   
        println("Performance awesome")  
    }  
}  
  
class Hero(a:Int) extends Bike(a){  
    c = 30  
    def run(){  
        println("Running fine...")  
        println("a = "+a)  
        println("b = "+b)  
        println("c = "+c)  
    }  
}  
  
object MainObject{  
    def main(args: Array[String]){  
        var h = new Hero(10)  
        h.run()  
        h.performance()  
    }  
}

Kết quả

Running fine...
a = 10
b = 20
c = 30
Performance awesome

Phương thức abstract không được hoàn thành

Trong ví dụ này chúng ta sẽ không thực thi phương thức run() của abstract. Compiler sẽ đưa ra một lỗi trong khi biên dịch chương trình. Một thông báo lỗi sẽ được đưa ra như bên dưới

abstract class Bike{  
    def run()               // Phương thức abstract  
}  
  
class Hero extends Bike{        // Không được thực thi trong class này  
    def runHero(){  
        println("Running fine...")  
    }  
}  
  
object MainObject{  
    def main(args: Array[String]){  
        var h = new Hero()  
        h.runHero()  
    }  
}

Kết quả

error: class Hero needs to be abstract, since method run in class Bike of type ()Unit is not defined
class Hero extends Bike{
      ^
one error found

Để tránh lỗi này hoặc là chúng ta phải thực thi tất cả các phương thức, members của abstract class hoặc là thực thi trong abstract class của chúng ta

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.