Menu
CoddyTech

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.

challenge icon

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ức setLevel(int level). Đồng thời thêm hằng số MAX_LEVEL có 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, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (truy cập hằng số từ giao diện Adjustable)
    Sau đó in: 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
        
    }
}
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Java online