[Tự học Java] Class trừu tượng(Abstract) và phương thức trừu tượng trong Java

Trong bài chỉ dẫn này, tất cả chúng ta sẽ tìm tòi về tính trừu tượng(Abstract) trong Java. Tất cả chúng ta sẽ tìm tòi về các class và phương thức trừu tượng(Abstract) trong Java và cách dùng chúng trong chương trình của các bạn.

1. Class trừu tượng(Abstract) trong Java

Một class trừu tượng trong Java chẳng thể được khởi tạo (tất cả chúng ta chẳng thể tạo thành các đối tượng cho một class trừu tượng). Trong Java, tất cả chúng ta chỉ sử dụng keyword abstract để khai báo một class trừu tượng. 

abstract class Animal {
   //attributes and methods      
}

Nếu nỗ lực tạo thành các đối tượng của một class trừu tượng, tất cả chúng ta sẽ bị lỗi biên dịch. Lấy chẳng hạn,

Animal a1 = new Animal()

Nó sẽ bị lỗi biên dịch

Animal is abstract; cannot be instantiated

Mặc dầu các class trừu tượng chẳng thể được khởi tạo, tất cả chúng ta vẫn có thể tạo thành các subbclass từ nó. Tất cả chúng ta có thể tạo các đối tượng của subclass để truy cập các member của class trừu tượng.

Trước khi tất cả chúng ta tìm tòi cụ thể về nó, tất cả chúng ta cần hiểu các phương thức trừu tượng.

2. Phương thức trừu tượng trong Java

Tất cả chúng ta đều sử dụng keyword abstract để tạo các phương thức trừu tượng. Một phương thức trừu tượng được khai báo mà không cần triển khai. Ví dụ như:

abstract void makeSound();

Ở giai đoạn này, makeSound() là một phương thức trừu tượng. Phần thân của phương thức makeSound() được thay thế bởi ;.

Điều quan trong cần ghi nhớ là một class trừu tượng chỉ có thể chứa các phương thức trừu tượng. Nếu một class không phải là class trừu tượng chứa các phương thức trừu tượng, khi đó sẽ có lỗi biên dịch.

Một class trừu tượng có thể chứa cả phương thức trừu tượng và các phương thức không trừu tượng như chẳng hạn sau:

abstract class Animal {
   public void displayInfo() {
      System.out.println(“I am an animal.”);
   }

   abstract void makeSound();
}

Trong chẳng hạn trên, tất cả chúng ta đã tạo nên một class trừu tượng là Animal. Nó chứa một phương thức trừu tượng là makeSound()và một phương thức không trừu tượng là dispalyInfo().

Xem Thêm  WILLIAM MARBURY v. JAMES MADISON, Secretary of State of the United States. - constraint là gì

3. Tính kế thừa của class trừu tượng

Một class trừu tượng chẳng thể được khởi tạo. Để truy cập các member của một class trừu tượng, tất cả chúng ta phải kế thừa nó. Lấy chẳng hạn:

Chẳng hạn 1: Tính kế thừa của class trừu tượng

/**
* Cafedev.vn - Kênh thông tin IT vị trí thứ nhất viet nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Ins: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

abstract class Animal {
 public void displayInfo() {
   System.out.println("I am an animal.");
 }
}

class Dog extends Animal {

}
class Main {
 public static void main(String[] args) {
   Dog d1 = new Dog();
   d1.displayInfo();
 }
}

Kết quả là:

Ι am an animal.

Trong chẳng hạn trên, tất cả chúng ta có thể tạo thành một class trừu tượng là Animal. Tất cả chúng ta chẳng thể tạo các đối tượng của class Animal. Để truy cập phương thức displayinfo của Animal, tất cả chúng ta đã kế thừa subclass Dog của class Animal. Sau đó, tất cả chúng ta sử dụng đối tượng d1 của subclass Dog để truy cập phương thức displayInfo().

4. Sự ghi đè của các phương thức trừu tượng

Trong Java, ghi đè các phương thức trừu tượng của superclass trong subclass là điều bắt buộc. Này là bởi vì subclass kế thừa các phương thức trừu tượng của superclass. Vì subclass của các bạn chứa các phương thức trừu tượng, tất cả chúng ta cần phải ghi đè chúng.

Chú thích: nếu subclass cũng được khai báo là trừu tượng, thì không bắt buộc phải ghi đè các phương thức trừu tượng.

Chẳng hạn 2: Ghi đè phương thức trừu tượng

/**
* Cafedev.vn - Kênh thông tin IT vị trí thứ nhất viet nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Ins: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

abstract class Animal {
   abstract void makeSound();

   public void eat() {
      System.out.println("I can eat.");
   }
}

class Dog extends Animal {

   public void makeSound() {
      System.out.println("Bark bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      d1.eat();
   }
}

Kết quả là:

Bark bark.
Ι can eat.

Trong chẳng hạn trên, tất cả chúng ta đã tạo nên một class trừu tượng là Animal. Class này chứa một phương thức trừu tượng là makeSound()và một phương thức không trừu tượng là eat().

Tất cả chúng ta đã kế thừa subclass dog từ superclass Animal. Ở giai đoạn này, subclass dog ghi đè phương thức trừu tượng displayInfo().

Xem Thêm  Cách mở, đọc và ghi tệp văn bản bằng Python [Có ví dụ] - mở tệp văn bản python

Kế tiếp, tất cả chúng ta tạo thành một đối tượng d1 của class Dog. Sử dụng đối tượng này, tất cả chúng ta sẽ gọi các phương thức d1.displayInfo() và d1.eat().

5. Truy cập hàm tạo của các class trừu tượng

Cũng giống như các class không trừu tượng, tất cả chúng ta có thể truy cập vào hàm tạo của class trừu tượng từ subclass sử dụn keyword super. Lấy chẳng hạn,

abstract class Animal {
   Animal() {
      ….
   }
}

class Dog extends Animal {
   Dog() {
      super();
      ...
   }
}

Ở giai đoạn này, tất cả chúng ta đã sử dụng super() bên trong hàm tạo của class dog để truy cập vào hàm tạo của class Animal.

Lưu ý rằng keyword super luôn luôn phải là câu lệnh trước nhất trong hàm tạo của subclass. Hãy xem thêm keyword super trong Java để tham khảo thêm.

6. Vì Sao Java Lại Có Tính Trừu Tượng?

Tính trừu tượng là một thuật ngữ trọng yếu của lập trình hướng đối tượng. Tính trừu tượng chỉ trổ tài những thông tin thiết yếu và toàn bộ các cụ thể không thiết yếu đều bị ẩn. Điều này cho phép tất cả chúng ta quản lí tính linh động bằng cách bỏ qua hoặc ẩn đi các cụ thể bằng một sáng tạo dễ dàng mà thượng hạng hơn.

Một chẳng hạn thực tiễn về tính trừu tượng có thể là phanh xe máy. Tất cả chúng ta đều biết phanh xe để làm gì. Khi tất cả chúng ta kích hoạt bộ phanh, xe máy sẽ dừng lại. Bên cạnh đó, hoạt động của phanh được ẩn đi khỏi tất cả chúng ta.

Ưu thế chính của việc che đi hoạt động của phanh là hiện giờ nhà cung cấp có thể bố trí phanh khác nhau cho các loại xe máy khác nhau; ngoài ra, phương thức hoạt động của phanh vẫn giống nhau.

Hãy lấy một chẳng hạn giúp tất cả chúng ta am hiểu hơn về tính trừu tượng trong Java.

Chẳng hạn 3: Tính trừu tượng trong Java

/**
* Cafedev.vn - Kênh thông tin IT vị trí thứ nhất viet nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Ins: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

abstract class Animal {
   abstract void makeSound();

}

class Dog extends Animal {
   public void makeSound() {
      System.out.println("Bark bark.");
   }
}

class Cat extends Animal {
   public void makeSound() {
      System.out.println("Meows ");
   }
}

class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();

      Cat c1 = new Cat();
      c1.makeSound();
   }
}

Kết quả là:

Bark bark
Meows

Trong chẳng hạn trên, tất cả chúng ta đã tạo nên superclass Animal. Superclass này có phương thức trừu tượng là makeSound ()

Xem Thêm  Cách tạo biến trong Python cho tất cả các loại dữ liệu - làm thế nào để thực hiện các biến trong python

Phương thức makeSound() chẳng thể được triển khai bên trong class Animal. Này là bởi vì mỗi một animal lại có một tiếng kêu riêng. Cho nên, mỗi subclass của superclass Animal cần phải có cách triển khai phương thức makeSound() khác nhau.

Tất cả chúng ta chẳng thể triển khai phương thức makeSound() trong superclass Animal theo cách như kiểu nó sẽ đúng với toàn thể các subclass của nó. Cho nên, việc triển khai phương thức makeSound() trong Animal được ẩn đi.

Trong chẳng hạn trên, mỗi class Dog và Cat tự triển khai phương thức makeSound() riêng.

7. Các điểm trọng yếu cần nhớ

Tất cả chúng ta sử dụng keyword abstract để tạo thành các class và phương thức trừu tượng.

Một class chứa phương thức trừu tượng cũng là một class trừu tượng.

Tất cả chúng ta chẳng thể tạo thành các đối tượng của một class trừu tượng.

Để triển khai các tính chất của một class trừu tượng, tất cả chúng ta phải kế thừa các subclass từ nó và tạo thành các đối tượng của subclass.

Một subclass phải ghi đè lên toàn bộ các phương thức trừu tượng. Bên cạnh đó, nếu subclass đó được khai báo là trừu tượng, không bắt buộc phải ghi đè các phương thức trừu tượng.

Tất cả chúng ta có thể truy cập các tính chất và các phương thức tĩnh của một class trừu tượng bằng cách dùng tham chiếu của lớp trừu tượng. Chẳng hạn,

Animal.staticMethod();

Interface trong Java

8.

Trong Java, một giao diện cũng giống như một lớp trừu tượng. Bên cạnh đó, giao diện không có bất kỳ phương thức không trừu tượng nào cả. Tất cả chúng ta sẽ tham khảo thêm về các giao diện trong các bài chỉ dẫn kế tiếp.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!

Viết một bình luận