Bài viết sau đây sẽ giúp bạn sáng tỏ về lớp trừu trượng (Abstract Class) và phương thức trừu tượng (Abstract Methods). Đồng thời cũng phân biệt nó với Class và phương thức thông thường.
Lớp trừu tượng trong Java
Lớp trừu tượng (Abstract Class) là lớp bị hạn chế. Và không thể dùng để tạo đối tượng (để truy cập được thì phải kế thừa từ lớp khác).
Lớp thông thường khi muốn gọi thì chúng ta sẽ dùng từ khóa new
. Tuy nhiên với lớp trừu tượng thì không thể làm được điều này. Thay vào đó phải sử dụng một lớp con để kế thừa (Extends) từ Abstract Class.
Ví dụ:
abstract class myClass { // Phương thức trừu tượng abstract void method1(); // Phương thức thường void method2() { System.out.println("Đây là phương thức thường"); } }
Những điều cần chú ý:
- Lớp trừu tượng được khai báo bằng từ khóa
abstract
- Nó không được khởi tạo
- Nó cũng có thể có các hàm tạo và các phương thức tĩnh
- Nó có thể có các phương thức trừu tượng và không trừu tượng
Phương thức trừu tượng
Phương thức trừu tượng (Abstract Method) không có phần thân như phương thức thường.
abstract void Example();
Còn phương thức thường
void display() { // Code }
Ví dụ:
Tạo một tập tin là Cars.java
abstract class Cars { abstract void run(); }
Tiếp theo tạo file Ford.java
kế thừa Cars
public class Ford extends Cars { void run() { System.out.println("Hành động chạy!"); } public static void main(String[] args) { Ford obj = new Ford(); obj.run(); } }
Như ví dụ ở trên ta thấy khi class Ford kế thừa lại lớp Cars thì nó sẽ khai báo lại phương thức run().
Tại sao lại sử lớp và phương thức trừu tượng?
Giả sử chúng ta có một lớp động vật như Chó, Mèo, Lợn. Chúng đều có đặc điểm như hành động là chạy, tiếng kêu, màu lông. Chúng ta không thể khai báo mỗi động vật là một Class như vậy sẽ phải viết rất nhiều code.
Tuy nhiên khi dùng phương thức trừu tượng rồi truyền tham số vào như vậy code sẽ trở nên ngắn gọn, đơn giản hơn.
Ví dụ:
abstract class DongVat { abstract void tiengkeu(); abstract void maulong(); abstract void sochan(); }
Tiếp theo chúng ta chỉ cần tạo ra Class ConVat
để kế thừa lớp DongVat
đã khởi tạo.
public class ConVat extends DongVat { String tiengkeu; String maulong; String sochan; String tendongvat; public ConVat(String tendongvat) { this.tendongvat = tendongvat; System.out.println(this.tendongvat); } void tiengkeu(String tiengkeu) { this.tiengkeu = tiengkeu; System.out.println(this.tiengkeu); } void maulong(String maulong) { this.maulong = maulong; System.out.println(this.maulong); } void sochan(String sochan) { this.sochan = sochan; System.out.println(this.sochan); } public static void main(String[] args) { ConVat obj = new ConVat("Mickey"); obj.tiengkeu("Ẳng ẳng"); obj.maulong("Màu đen"); obj.sochan("4 chân"); } }
Với đoạn mã trên bạn chỉ cần truyền đối số là nó sẽ in ra màn hình các đặc điểm của động vật. Như vậy bạn sẽ không cần phải viết lại cho mỗi động vật mà thay vào đó dùng chung cho toàn bộ lớp động vật đó.
Như vậy là chúng ta đã cùng nhau tìm hiểu về lớp trừu tượng và phương thức trừu tượng trong Java. Qua bài viết này bạn đã dần sáng tỏ về lập trình hướng đối tượng (OOP) trong Java rồi đấy.