Giới thiệu về giao diện
Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 34 trên 87.
Bạn đã thấy lớp trừu tượng định nghĩa các hợp đồng mà lớp con phải tuân theo. Nhưng nếu bạn muốn một lớp tuân theo nhiều hợp đồng thì sao? Java không cho phép một lớp kế thừa nhiều lớp, nhưng giải quyết vấn đề này bằng giao diện.
Interface là một hợp đồng xác định những gì một lớp có thể làm mà không nêu rõ cách lớp thực hiện. Khác với lớp trừu tượng, interface chỉ chứa chữ ký phương thức (theo mặc định), không có phần triển khai:
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}Hãy xem giao diện như một lời hứa. Khi một lớp triển khai giao diện, lớp đó cam kết cung cấp phần triển khai cho tất cả phương thức được khai báo trong giao diện. Giao diện xác định khả năng, còn lớp cung cấp hành vi.
Bạn khai báo giao diện bằng từ khóa interface thay vì class. Tất cả phương thức trong giao diện đều mặc định là public và abstract, nên bạn không cần viết những từ khóa đó:
public interface Playable {
void play(); // ngầm định là public abstract
void pause();
void stop();
}Giao diện cũng có thể khai báo hằng số, vốn mặc định là public static final:
public interface GameConstants {
int MAX_PLAYERS = 4; // ngầm định là public static final
}Trong bài học tiếp theo, bạn sẽ tìm hiểu cách các lớp triển khai giao diện bằng từ khóa implements.
Thử thách
DễHãy xây dựng một hệ thống điều khiển thiết bị bằng cách định nghĩa các giao diện mô tả những việc khác nhau mà thiết bị có thể làm. Thử thách này tập trung vào việc tạo giao diện (interface): các hợp đồng xác định khả năng mà không quy định cách chúng hoạt động.
Bạn sẽ tổ chức code trong ba tệp:
Switchable.java: Tạo một giao diện xác định ý nghĩa của việc một thiết bị có thể bật tắt. Mọi thiết bị có thể bật tắt đều phải bật và tắt được. Khai báo hai phương thức:turnOn()vàturnOff(). Hãy nhớ rằng các phương thức trong giao diện mặc định là public và abstract, vì vậy bạn chỉ cần khai báo chữ ký phương thức.Adjustable.java: Tạo một giao diện khác xác định ý nghĩa của việc điều chỉnh được một thiết bị. Thiết bị có thể điều chỉnh phải cho phép thiết lập mức. Khai báo phương thứcsetLevel(int level). Đồng thời thêm hằng sốMAX_LEVELcó giá trị100: hãy nhớ rằng các hằng số trong giao diện mặc định làpublic static final.Main.java: Chứng minh rằng bạn đã định nghĩa đúng các giao diện bằng cách in thông tin về chúng. Bạn sẽ nhận một đầu vào: giá trị mức (int). In ba dòng sau:Switchable methods: turnOn, turnOffAdjustable methods: setLevelMax level constant: [MAX_LEVEL value](truy cập hằng số từ giao diện Adjustable)
Setting level to: [input level]
Bạn sẽ nhận một đầu vào: giá trị mức (int).
Thử thách này chỉ tập trung vào việc định nghĩa giao diện: các bản thiết kế mô tả khả năng. Trong bài học tiếp theo, bạn sẽ tìm hiểu cách các lớp triển khai những giao diện này để tạo ra hành vi thực tế!
Tự làm thử
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
// TODO: In ra thông tin về các giao diện
// In ra: "Switchable methods: turnOn, turnOff"
// In ra: "Adjustable methods: setLevel"
// In ra: "Max level constant: " rồi đến Adjustable.MAX_LEVEL
// In ra: "Setting level to: " rồi đến giá trị level đầu vào
}
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTừ khóa thisPhương thứcTrường (thuộc tính)Phương thức khởi tạoNạp chồng phương thức khởi tạoÔn tập: Máy tính đơn giản4Kế thừa
Kế thừa cơ bản (extends)Từ khóa superGhi đè phương thức (@Override)Chuỗi gọi hàm khởi tạoLớp ObjectKế thừa đơn và đa cấpVì sao không hỗ trợ kế thừa nhiều lớpÔn tập: Phân cấp lớp Employee7Phương thức đặc biệt và lớp Object
Phương thức toString()equals() và hashCode()Phương thức clone()compareTo() và ComparableGiao diện ComparatorÔn tập: sắp xếp tùy chỉnh2Bộ điều chỉnh quyền truy cập và đóng gói
Tổng quan về các mức truy cậpPhương thức getter và setterẨn thông tinTừ khóa finalÔn tập: Trình quản lý tài khoản ngân hàng5Tính đa hình
Kiến thức cơ bản về nạp chồng phương thứcGhi đè phương thức (thời gian chạy)Chuyển kiểu lên và chuyển kiểu xuốngToán tử instanceofLớp và phương thức trừu tượngÔn tập: máy tính hình học8Khái niệm OOP nâng cao
Kết hợp và kế thừaKết tập và hợp thànhLớp bên trong, lớp lồng nhau và lớp ẩn danhKiểu enum và phương thức enumBản ghi (Java 16+)Lớp sealed (Java 17+)3Thuộc tính lớp và thành viên tĩnh
Biến của instance và biến tĩnhPhương thức tĩnhKhối tĩnhHằng số (static final)Ôn tập: bộ đếm và tiện ích6Giao diện và lớp trừu tượng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnPhương thức mặc định và tĩnh trong giao diệnLớp trừu tượng và giao diệnGiao diện hàmÔn tập: hệ thống thanh toán9Kiểu tổng quát
Giới thiệu về kiểu tổng quátLớp tổng quátPhương thức tổng quátTham số kiểu có giới hạnKý tự đại diện (?, extends, super)Ôn tập: vùng chứa tổng quát12Mẫu thiết kế, phần 2
Mẫu CommandMẫu AdapterMẫu DecoratorMẫu Template MethodMẫu StateMẫu CompositeMẫu IteratorTự luyện tập: Trình biên dịch Java online