Abstract class trong JAVA

Một lớp được khai báo với từ khóa abstract (trừu tượng) được gọi là một lớp trừu tượng trong Java (abstract class).

Lớp trừu tượng trong Java có thể có các phương thức trừu tượng và không trừu tượng (phương thức với phần thân).

Trước khi tìm hiểu về lớp trừu tượng Java, chúng ta hãy hiểu về trừu tượng trong Java trước.

Trừu tượng trong Java là gì?

Nói ngắn gọn, Trừu tượng trong Java là một quá trình ẩn các chi tiết triển khai và chỉ hiển thị chức năng cho người dùng.

Nói theo cách khác, nó chỉ hiển thị những thứ cần thiết cho người dùng và ẩn các chi tiết nội bộ.

Ví dụ: Gửi SMS khi bạn nhập văn bản và gửi tin nhắn. Bạn không biết cần quy trình xử lý nội bộ về việc gửi tin nhắn.

Tính trừu tượng cho phép bạn tập trung vào những gì đối tượng làm thay vì cách nó thực hiện.

Các cách để đạt được tính trừu tượng trong JAVA

Có hai cách để đạt được tính trừu tượng trong java, sử dụng:

  • Abstract class (0 đến 100%)
  • Interface (100%)

Lớp trừu tượng (Abstract class) trong JAVA

Abstract class trong Java
Abstract class trong Java

Một lớp được khai báo là abstract được gọi là một lớp trừu tượng. Nó có thể có các phương thức trừu tượng và không trừu tượng. Nó cần được extend và khai triển phương thức của nó.

Lớp trừu tượng thì không thể được khởi tạo.

Quy tắc của lớp trừu tượng trong JAVA:

  • Một lớp trừu tượng phải được khai báo bằng một từ khóa abstract.
  • Nó có thể có các phương thức trừu tượng và không trừu tượng.
  • Nó không thể được khởi tạo.
  • Nó cũng có thể có các hàm tạo (constructor) và các phương thức static.
  • Nó có thể có các phương thức cuối cùng sẽ buộc lớp con không thay đổi phần thân của phương thức

Ví dụ class trừu tượng trong Java:

abstract class A{}

Phương thức trừu tượng trong JAVA

Một phương thức được khai báo là abstractkhông có triển khai được gọi là một phương thức trừu tượng.

Ví dụ phương thức trừu tượng trong Java:

abstract void printStatus(); // Không có phần thân

Ví dụ về lớp trừu tượng có một phương thức trừu tượng

Trong ví dụ này, XeDien là một lớp trừu tượng chỉ chứa một phương thức trừu tượng chạy. Việc thực hiện nó được cung cấp bởi lớp Vinfast.

// Khai báo class trừu tượng
abstract class XeDien{
    // Khai báo phương thức trừu tượng
    abstract void chay(); // Không có phần thân
}

class Vinfast extends XeDien{
    void chay(){
        System.out.println("Chạy ngon...");
    }
    public static void main(String args[]){
        XeDien xeDien = new Vinfast();
         xeDien.chay();
    }
}

Kết quả khi chạy chương trình:

Chạy ngon...

Hiểu kịch bản thực tế của lớp Trừu tượng

Trong bên dưới đây, Hinh là lớp trừu tượng và việc triển khai nó được cung cấp bởi các lớp HinhChuNhat và HinhTron.

Hầu hết, chúng ta không biết về lớp thực thi (được ẩn đối với người dùng cuối) và một đối tượng của lớp thực hiện được cung cấp bởi phương thức gốc.

Phương thức gốc là một phương thức trả về thể hiện của lớp. Chúng ta sẽ tìm hiểu về phương thức factory ở phần sau.

Trong ví dụ này, nếu bạn tạo thể hiện của lớp HinhChuNhat, phương thức ve() của lớp HinhChuNhat sẽ được gọi.

File: TestTruuTuong.java

// Khai báo lớp trừu tượng Hinh
abstract class Hinh{  
    abstract void ve();
}

// Trong trường hợp thực, việc triển khai được cung cấp bởi những người khác, tức là người dùng cuối không biết

class HinhChuNhat extends Hinh{
    void ve(){
        System.out.println("Vẽ hình chữ nhật");
    }  
}

class HinhTron extends Hinh{  
    void ve(){
       System.out.println("Vẽ hình tròn");
    }  
}

// Trong thực tế, phương thức được gọi bởi lập trình viên hoặc người dùng
class TestTruuTuong{  
    public static void main(String args[]){
        Hinh hinhTron = new HinhTron();
        hinhTron.ve(); 
    }  
}

Kết quả nhận được:

Vẽ hình tròn

Tiếp tục một ví dụ khác về lớp trừu tượng

File: NganHangDemo.java

abstract class NganHang{    
    abstract int layLaiSuat();    
}

class Agri extends NganHang{    
    int layLaiSuat(){
        return 7;
    }    
}    
class VCB extends NganHang{    
    int layLaiSuat(){
        return 9;
    }    
}    
    
class NganHangDemo{    
    public static void main(String args[]){    
        NganHang nganHang;
        nganHang = new Agri();  
        System.out.println("Lãi suất: "+nganHang.layLaiSuat()+" %");    
        nganHang = new VCB();
        System.out.println("Lãi suất: "+nganHang.layLaiSuat()+" %");    
    }
}

Kết quả nhận được:

Lãi suất: 7 %
Lãi suất: 9 %

Ví dụ Lớp trừu tượng có constructor, data member và các method

Một lớp trừu tượng có thể có data member, phương thức trừu tượng, thân phương thức (phương thức không trừu tượng), phương thức khởi tạo và thậm chí cả phương thức main().

File: TestLopTruuTuong.java

// Ví dụ về một lớp trừu tượng có các phương thức trừu tượng và không trừu tượng
abstract class XeDien{
    
    // Hàm khởi tạo
    XeDien(){
        System.out.println("Xe điện được tạo");
    }

    // Phương thức trừu tượng
    abstract void chay();

    // Phương thức không trừu tượng
    void thayPin(){
        System.out.println("Đã thay pin");
    }
 }

// Creating a Child class which inherits Abstract class  
class Vinfast extends XeDien{  
    void chay(){
        System.out.println("Đang chạy...");
   }  
}

// Tạo class để gọi thử 2 loại phương thức  
class TestLopTruuTuong{  
    public static void main(String args[]){  
        XeDien xeDien = new Vinfast();
        xeDien.chay();  
        xeDien.thayPin(); 
   }  
}

Kết quả nhận được:

Xe điện được tạo
Đang chạy...
Đã thay pin

Lưu ý #1: Nếu có một phương thức trừu tượng trong một lớp, thì lớp đó phải trừu tượng.

class XeDien{  
    abstract void chay();  
}

Class này khi biên dịch sẽ lỗi

compile time error

Lưu ý #2: Nếu bạn đang extends một lớp trừu tượng có một phương thức trừu tượng, bạn phải triển khai cụ thể phương thức trừu tượng đó hoặc làm cho lớp mới này cũng là trừu tượng.

Ví dụ một lớp trừu tượng thực tế khác khi lập trình Java

Lớp trừu tượng cũng có thể được sử dụng để cung cấp khai triển một phần của interface. Trong trường hợp đó, người dùng cuối có thể không bị buộc ghi đè tất cả các phương thức của interface.

Lưu ý: Nếu bạn là người mới bắt đầu HỌC LẬP TRÌNH JAVA, hãy tìm hiểu interface trước và bỏ qua ví dụ này.

File: Test.java

interface IA{  
    void a();  
    void b();  
    void c();  
    void d();  
}  
  
abstract class B implements IA{  
    public void c(){
        System.out.println("Tôi là c");
    }  
}
  
class M extends B{  
    public void a(){System.out.println("Tôi là a");}  
    public void b(){System.out.println("Tôi là b");}  
    public void d(){System.out.println("Tôi là d");}  
}  
  
class Test{  
    public static void main(String args[]){  
        IA a = new M();
        a.a();
        a.b();
        a.c();
        a.d();
    }
}

Kết quả:

Tôi là a
Tôi là b
Tôi là c
Tôi là d

Như bạn thấy đó. Khi class trừu tượng B khai triển interface IA thì không bắt buộc phải ghi đè phương thức a(), b(), d().

Như vậy, trong bài tự học Java này mình đã giới thiệu cho bạn về Abstract class trong Java và cũng đã có một vài ví dụ để bạn hiểu các tạo Abtract class để sử dụng.

Chúc bạn học Java tốt.

Bài viết gần đây

4 Loại Access Modifiers trong JAVA

Access Modifiers trong Java chỉ định khả năng / cấp độ truy cập hoặc phạm vi của một field, method, constructor hoặc class. Có 4 loại: private, default, protected, public

Package trong JAVA

Package trong Java có thể được phân loại theo hai dạng, built-in package (có sẵn) và user-defined package (gói do người dùng định nghĩa)

Sự khác biệt giữa Abstract Class và Interface

Cả Abstract class và Interface đều được sử dụng để đạt được sự trừu tượng nơi chúng ta có thể khai báo các phương thức trừu tượng. Cả Abstract class và Interface đều không thể được khởi tạo.

Interface trong JAVA

Interface trong Java là một cơ chế để đạt được sự trừu tượng. Có thể chỉ có các phương thức trừu tượng trong Interface, không có phần thân phương thức

Abstract class trong JAVA

Trừu tượng là một quá trình ẩn các chi tiết triển khai và chỉ hiển thị chức năng cho người dùng. Cùng mình học cách sử dụng Abstract class trong Java

Hướng dẫn tải và Cài đặt Java cho Windows 10 (Chi tiết)

Bài viết này mình sẽ hướng dẫn bạn cách tải và cài đặt Java cho Windows 10 để học lập trình Java.

Leave a reply

Please enter your comment!
Please enter your name here