Interface trong Java

Một giao diện (Interface) trong Java là một bản thiết kế của một lớp, nhưng chỉ chứa các phương thức trừu tượng. Giao diện cung cấp tính trừu tượng và khả năng đa kế thừa trong Java, tuy nhiên không thể khởi tạo một giao diện giống như lớp trừu tượng.

Giao diện trong Java là gì?

Từ khoá “interface” đã đưa khái niệm trừu tượng một bước tiến xa hơn. Giao diện có thể được coi là một lớp trừu tượng “tinh khiết”, chỉ chứa các giao diện cho các lớp muốn kế thừa từ nó. Một giao diện cũng có thể chứa các trường nhưng Java tự động chuyển các trường này thành static và final.

Để tạo ra một giao diện, ta sử dụng từ khoá “interface” thay vì từ khoá “class”. Giao diện gồm hai phần: phần khai báo và phần thân. Phần khai báo thể hiện thông tin về tên giao diện và liệu giao diện có kế thừa từ giao diện khác hay không. Phần thân chứa các khai báo hằng và khai báo phương thức. Tương tự như lớp, ta cũng có thể thêm từ khoá “public” trước định nghĩa của giao diện.

Ví dụ dưới đây mô tả giao diện “Printable” chỉ chứa một phương thức, được triển khai bởi lớp A.

interface Printable {
    void print();
}

class A6 implements Printable {
    public void print() {
        System.out.println("In");
    }

    public static void main(String args[]) {
        A6 obj = new A6();
        obj.print();
    }
}

Khi ghi đè các phương thức được định nghĩa trong giao diện:

  • Không nên khai báo các phần kiểm tra exception trong phương thức triển khai. Thay vào đó, nên khai báo chúng trong phương thức giao diện hoặc các lớp phụ được khai báo bởi phương thức giao diện.
  • Kiểu trả về của phương thức giao diện và khi ghi đè phương thức phải giống nhau.
  • Một lớp triển khai có thể là abstract và do đó, không cần triển khai các phương thức giao diện.

Khi triển khai giao diện:

  • Một lớp có thể triển khai một hoặc nhiều giao diện cùng lúc.
  • Một lớp chỉ có thể kế thừa từ một lớp khác, nhưng có thể triển khai nhiều giao diện.
  • Một giao diện có thể kế thừa từ một giao diện khác, giống như cách một lớp có thể kế thừa từ lớp khác.

Đa kế thừa trong Java bằng giao diện

Nếu một lớp triển khai nhiều giao diện hoặc một giao diện kế thừa từ nhiều giao diện khác, thì đó được gọi là đa kế thừa.

Ví dụ dưới đây mô tả một lớp A4 triển khai giao diện “Printable” và “Showable”.

interface Printable {
    void print();
}

interface Showable {
    void show();
}

class A4 implements Printable, Showable {
    public void print() {
        System.out.println("In");
    }

    public void show() {
        System.out.println("Hiển thị");
    }

    public static void main(String args[]) {
        A4 obj = new A4();
        obj.print();
        obj.show();
    }
}

Giao diện kế thừa giao diện trong Java

Một giao diện cũng có thể kế thừa từ các giao diện khác.

Ví dụ dưới đây mô tả một giao diện “Showable” kế thừa từ giao diện “Printable”.

interface Printable {
    void print();
}

interface Showable extends Printable {
    void show();
}

class A3 implements Showable {
    public void print() {
        System.out.println("In");
    }

    public void show() {
        System.out.println("Hiển thị");
    }

    public static void main(String args[]) {
        A3 obj = new A3();
        obj.print();
        obj.show();
    }
}

Giao diện đánh dấu trong Java là gì?

Một giao diện không chứa bất kỳ thành viên nào được gọi là giao diện đánh dấu (Marker Interface). Ví dụ: Serializable, Cloneable, Remote, … Chúng được sử dụng để cung cấp thông tin quan trọng cho JVM để thực hiện các hoạt động hữu ích.

public interface Serializable {
}

Giao diện lồng nhau trong Java

Một giao diện có thể chứa giao diện khác, được gọi là giao diện lồng nhau.

Ví dụ dưới đây mô tả giao diện “printable” chứa giao diện “MessagePrintable”.

interface printable {
    void print();

    interface MessagePrintable {
        void msg();
    }
}

Một giao diện giống như một lớp, nhưng chúng mang tính chất trừu tượng và khả năng đa kế thừa. Giao diện là một công cụ mạnh mẽ trong Java để tạo ra các hệ thống linh hoạt và dễ dàng mở rộng.

FEATURED TOPIC