Menu
CoddyTech

Triển khai nhiều 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 36 trên 87.

Khác với kế thừa lớp, khi bạn chỉ có thể mở rộng một lớp, Java cho phép một lớp triển khai nhiều giao diện. Đây là cách Java hỗ trợ một hình thức kế thừa đa lớp an toàn.

Để triển khai nhiều giao diện, hãy liệt kê chúng sau từ khóa implements, cách nhau bằng dấu phẩy:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

Lớp (class) phải triển khai tất cả phương thức (method) từ mọi giao diện (interface) mà nó khai báo. Bạn cũng có thể kết hợp kế thừa (inheritance) với nhiều giao diện:

public class Square extends Shape implements Drawable, Resizable {
    // Phải triển khai các phương thức (methods) của cả hai giao diện (interfaces)
    // Cũng có thể dùng các thành viên kế thừa từ Shape
}

Sự linh hoạt này cho phép bạn thiết kế các lớp đáp ứng nhiều vai trò. Một SmartPhone có thể triển khai các giao diện Callable, Messageable và Browsable, mỗi giao diện định nghĩa những khả năng khác nhau mà điện thoại hỗ trợ.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống thiết bị thông minh, trong đó mỗi thiết bị có thể có nhiều khả năng. Bạn sẽ tạo một SmartTV có thể bật/tắt và điều chỉnh âm lượng, qua đó minh họa cách một lớp có thể triển khai nhiều giao diện (interface) để đảm nhận các vai trò khác nhau.

Bạn sẽ sắp xếp code trong bốn tệp:

  • Powerable.java: Định nghĩa giao diện cho các thiết bị có thể bật/tắt. Giao diện này cần khai báo hai phương thức: powerOn() và powerOff(), cả hai đều trả về void.
  • VolumeControl.java: Định nghĩa giao diện cho các thiết bị có thể điều chỉnh âm lượng. Giao diện này cần khai báo một phương thức setVolume(int level) trả về void và một phương thức getVolume() trả về một int.
  • SmartTV.java: Tạo một lớp triển khai cả hai giao diện Powerable và VolumeControl. SmartTV của bạn cần có trường brand (String), trường isOn (boolean, ban đầu là false) và trường volume (int, ban đầu là 0). Thêm hàm khởi tạo nhận tên thương hiệu. Triển khai tất cả các phương thức bắt buộc:
    • powerOn() cần đặt isOn thành true và in ra: [brand] TV is now ON
    • powerOff() cần đặt isOn thành false và in ra: [brand] TV is now OFF
    • setVolume(int level) cần cập nhật âm lượng và in ra: [brand] TV volume set to [level]
    • getVolume() cần trả về âm lượng hiện tại
  • Main.java: Kết hợp mọi thứ để minh họa cách triển khai nhiều giao diện. Bạn sẽ nhận hai đầu vào: tên thương hiệu (String) và mức âm lượng (int). Tạo một SmartTV với thương hiệu đã cho, sau đó:
    • Gọi powerOn()
    • Gọi setVolume() với mức âm lượng đã cho
    • Dùng getVolume() để in ra: Current volume: [volume]
    • Gọi powerOff()

Bạn sẽ nhận hai đầu vào: thương hiệu TV (String) và mức âm lượng (int).

Đầu ra của bạn cần có bốn dòng, minh họa cách SmartTV đáp ứng hợp đồng của cả hai giao diện. Thiết bị có thể bật/tắt như mọi thiết bị Powerable và điều chỉnh âm lượng như mọi thiết bị VolumeControl!

Tự làm thử

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Đọc dữ liệu đầu vào
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: Tạo SmartTV với thương hiệu đã cho
        
        // TODO: Gọi powerOn()
        
        // TODO: Gọi setVolume() với mức âm lượng đã cho
        
        // TODO: In ra: Current volume: [volume] bằng getVolume()
        
        // TODO: Gọi powerOff()
        
    }
}
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