1. Abstraction là gì?
Abstraction là quá trình ẩn đi các chi tiết thực hiện chỉ hiển thị chức năng với những thông tin cần thiết cho người dùng. Người dùng chỉ có thể nhận được kết quả mà không thể biết được quá trình, các bước tạo ra kết quả đó.
Các cách để đạt được Abstraction
- class abstract (0 đến 100%)
- interface (100%)
2. Abstract class trong Java
Một class được khai báo bằng từ khóa abstract được gọi là lớp trừu tượng trong Java. Nó có thể có các abstract method(phương thức trừu tượng) và non-abstract(phương thức không trừu tượng). Nó cần được extends và các method của nó cần implements để thực hiện các logic. Abstract class thì không thể khởi tạo.
Những điểm cần nhớ:
- Một lớp trừu tượng phải được khai báo bằng từ khóa abstract.
- Nó có thể có các phương thức trừu tượng(abstract method) và không trừu tượng(none-abstract method).
- Nó cũng có thể có các constructor và phương thức tĩnh(static method).
- Nó có thể có các final method.
- Nó không thể được khởi tạo.
– Ví dụ:
// class abstract public abstract class SampleAbstractClass { // abstract method public abstract void sayHello(); // abstract method has not body // no abstract method has body public int calculate(int a, int b) { return a + b; } // static method public static void sayGoodBye() { System.out.println("Bye!"); } // constructor protected SampleAbstractClass() { } // final method public final void noChangeBody(){ System.out.println("Lớp con không được thay đổi nội dung của phương thức này vì nó là final method"); } } // class extends từ abstract class public class SampleExtendClass extends SampleAbstractClass { @Override // Ghi đè phương thức abstract method public void sayHello() { System.out.println("Hello, Tay Java"); } @Override // Ghi đè phương thức non-abstract method public int calculate(int a, int b) { return a * b; } }
3. Sự khác nhau giữa abstract class và interface
Cả interface
và abstract class
đều được sử dụng để thực hiện trừu tượng hóa trong Java, chúng ta có thể định nghĩa các phương thức trừu tượng (abstract method) nhưng không thể khởi tạo interface và abstract class.
Abstract class có thể có abstract and non-abstract methods. | Interface chỉ có abstract method. Từ Java 8 nó có thêm default and static methods |
Abstract class không hỗ trợ đa kế thừa. | Interface hỗ trợ đa kế thừa |
Abstract class có các biến final, non-final, static and non-static variables. | Interface chỉ có biến static and final variables. |
Abstract class có thể cung cấp các thực thi của interface | Interface không thể cung cấp các thực thi abstract class. |
Từ khoá abstract được dùng để định nghĩa abstract class. | Từ khóa interface được dùng để định nghĩa interface |
Môt abstract class có thể extends từ Java class khác và implements nhiều interface khác. | Một interface chỉ có thể extends từ các interface khác |
Một abstract class có thể được mở rộng và thực thi với từ khoá extends | Một interface chỉ có thể được thực thi và triển khai khi sử dụng từ khoá implements |
Một abstract class cho phép sử dụng tất cả các từ khóa truy xuất như private, protected và public | Một interface chỉ cho phép sử dụng từ khóa truy xuất là public |
4. Câu hỏi phỏng vấn Java Abstraction
1. Abstraction là gì trong Java?
Abstraction là một khái niệm trong lập trình hướng đối tượng, nó che giấu chi tiết cài đặt và chỉ hiển thị cho người dùng các chức năng cần thiết. Mục tiêu là giảm sự phức tạp bằng cách tách biệt những gì quan trọng và ẩn đi những thứ không cần thiết.
2. Sự khác biệt giữa Abstraction và Encapsulation?
- Abstraction: Tập trung vào việc che giấu chi tiết triển khai và chỉ hiển thị các chức năng cần thiết.
- Encapsulation: Là quá trình gói gọn dữ liệu và phương thức lại thành một đơn vị (class), đồng thời kiểm soát quyền truy cập bằng các modifier như
private
,public
,protected
.
3. Làm thế nào để đạt được abstraction trong Java?
Trong Java, abstraction có thể đạt được thông qua abstract class và interface.
- Abstract class có thể chứa các phương thức trừu tượng (không có thân) và cả phương thức có thân.
- Interface chỉ chứa các phương thức không có thân (trước Java 8) hoặc các phương thức mặc định (default methods) và static methods (từ Java 8 trở đi).
4. Abstract class là gì?
Abstract class là một lớp không thể được khởi tạo, nó có thể chứa cả phương thức trừu tượng và phương thức thông thường. Lớp con phải kế thừa abstract class và cung cấp cài đặt cho các phương thức trừu tượng.
5. Khi nào sử dụng Abstract class thay vì Interface?
Bạn nên sử dụng abstract class khi:
- Bạn muốn cung cấp một số phương thức mặc định hoặc dữ liệu dùng chung cho tất cả các lớp con.
- Khi bạn muốn chia sẻ các biến trạng thái hoặc cài đặt phương thức mặc định giữa các lớp con.
- Khi bạn cần các phương thức đã cài đặt mà không chỉ đơn thuần là trừu tượng.
6. Abstract class có thể có constructor không?
Có, abstract class có thể có constructor. Mặc dù không thể khởi tạo trực tiếp abstract class, constructor của nó có thể được gọi thông qua lớp con khi lớp con được khởi tạo.
7. Bạn có thể khai báo abstract method trong một class không phải abstract không?
Không, các phương thức trừu tượng chỉ có thể tồn tại trong các abstract class hoặc interface.
8. Lớp con có thể không triển khai tất cả các phương thức của abstract class không?
Không, nếu một lớp con không cài đặt tất cả các phương thức trừu tượng của abstract class, thì bản thân lớp con cũng phải được khai báo là abstract.
9. Có thể abstract class implement
interface không?
Có, abstract class có thể implement một hoặc nhiều interface và không nhất thiết phải cung cấp cài đặt cho tất cả các phương thức của interface. Trong trường hợp này, lớp con sẽ cần cài đặt các phương thức chưa được cài đặt.
10. Lợi ích của abstraction là gì?
- Giảm sự phức tạp của hệ thống bằng cách che giấu chi tiết triển khai.
- Tăng tính tái sử dụng và bảo trì mã nguồn dễ dàng hơn.
- Cho phép tập trung vào logic nghiệp vụ thay vì chi tiết kỹ thuật.