Trong ngôn ngữ lập trình Java, một interface là một bản thiết kế của một lớp. Nó chỉ chứa các phương thức trừu tượng và biểu diễn mối quan hệ “IS-A”. Interface trong Java cho phép chúng ta đạt được tính trừu tượng hoàn toàn và đa kế thừa. Trong bài viết này, chúng ta sẽ khám phá chi tiết về interface và những đặc điểm quan trọng của nó.
Contents
Interface trong Java
Một interface trong Java là một tập hợp các phương thức trừu tượng. Một lớp có thể triển khai (implement) một interface và kế thừa các phương thức abstract của interface đó. Interface không phải là một lớp, mà là một cách khai báo các hành vi mà một lớp triển khai.
Bạn đang xem: Interface trong java
Các trường của interface mặc định là public, static và final, trong khi các phương thức là public và abstract. Một interface không thể được khởi tạo giống như một lớp trừu tượng.
Ví dụ đơn giản về Interface trong Java
Hãy xem một ví dụ đơn giản về cách sử dụng interface trong Java:
public interface Printable {
void print();
}
public class A implements Printable {
public void print() {
System.out.println("Hello, I am printable");
}
public static void main(String[] args) {
A obj = new A();
obj.print();
}
}
Trong ví dụ trên, chúng ta có interface Printable
với một phương thức print()
. Lớp A
triển khai (implements) interface Printable
và triển khai phương thức print()
. Khi chúng ta khởi tạo một đối tượng của lớp A
và gọi phương thức print()
, kết quả sẽ là “Hello, I am printable”.
Đa kế thừa trong Java bằng Interface
Trong Java, đa kế thừa không được hỗ trợ thông qua lớp. Tuy nhiên, nó được hỗ trợ thông qua interface. Đa kế thừa xảy ra khi một lớp triển khai (implements) nhiều interface hoặc khi một interface kế thừa từ nhiều interface khác.
Câu hỏi đặt ra là tại sao đa kế thừa không được hỗ trợ thông qua lớp trong Java? Đa kế thừa thông qua lớp có thể tạo ra sự lưỡng nghĩa (ambiguity) khi trình triển khai được cung cấp bởi lớp triển khai. Điều này không xảy ra với interface vì không có trình triển khai được cung cấp bởi interface.
Ví dụ:
interface Printable {
void print();
}
interface Showable {
void show();
}
class TestInterface1 implements Printable, Showable {
public void print() {
System.out.println("Hello, I am printable");
}
public void show() {
System.out.println("Hello, I am showable");
}
public static void main(String[] args) {
TestInterface1 obj = new TestInterface1();
obj.print();
obj.show();
}
}
Trong ví dụ trên, chúng ta có hai interface Printable
và Showable
với các phương thức tương ứng. Lớp TestInterface1
triển khai cả hai interface và triển khai các phương thức print()
và show()
. Khi chúng ta khởi tạo một đối tượng của lớp TestInterface1
và gọi cả hai phương thức, kết quả sẽ là “Hello, I am printable” và “Hello, I am showable”.
Kế thừa Interface trong Java
Một interface có thể kế thừa từ một hoặc nhiều interface khác. Sự kế thừa interface cho phép chúng ta mở rộng các hành vi hiện có trong interface và tái sử dụng chúng trong interface mới.
Ví dụ:
interface A {
void print();
}
interface B extends A {
void show();
}
class C implements B {
public void print() {
System.out.println("Hello, I am printable");
}
public void show() {
System.out.println("Hello, I am showable");
}
public static void main(String[] args) {
C obj = new C();
obj.print();
obj.show();
}
}
Trong ví dụ trên, chúng ta có hai interface A
và B
. Interface B
kế thừa từ interface A
và mở rộng phương thức show()
. Lớp C
triển khai interface B
và triển khai cả hai phương thức print()
và show()
. Khi chúng ta khởi tạo một đối tượng của lớp C
và gọi cả hai phương thức, kết quả sẽ là “Hello, I am printable” và “Hello, I am showable”.
Marker Interface trong Java là gì?
Một marker (hay tagging) interface là một interface không có phương thức nào. Nó được sử dụng để cung cấp một số thông tin thiết yếu cho JVM để thực hiện các hoạt động hữu ích. Có hai mục đích chính của marker interface:
-
Tạo một cha chung: Một marker interface có thể được sử dụng để tạo ra một cha chung cho một nhóm interface. Ví dụ, khi một interface kế thừa marker interface
EventListener
, JVM biết rằng interface đó được sử dụng trong một sự kiện (event). -
Xem thêm : Hướng dẫn sử dụng Jupyter Notebook
Thêm một kiểu dữ liệu tới một class: Khi một class triển khai một marker interface, nó trở thành một kiểu interface thông qua tính đa hình (polymorphism).
Ví dụ về marker interface:
import java.io.Serializable;
class Student implements Serializable {
// code here
}
Trong ví dụ trên, Serializable
là một marker interface được sử dụng để cung cấp thông tin cho JVM về cách tuần tự hóa đối tượng Student
.
READ MORE:
Interface lồng nhau trong Java
Trong Java, chúng ta có thể khai báo interface lồng nhau, tức là một interface có thể chứa một hoặc nhiều interface khác. Điều này giúp tổ chức mã nguồn một cách rõ ràng và giúp tái sử dụng các hành vi của interface.
Ví dụ:
interface OuterInterface {
void outerMethod();
interface InnerInterface {
void innerMethod();
}
}
class OuterClass implements OuterInterface.InnerInterface {
public void innerMethod() {
System.out.println("Hello from inner method");
}
public static void main(String[] args) {
OuterClass obj = new OuterClass();
obj.innerMethod();
}
}
Trong ví dụ trên, chúng ta có interface OuterInterface
và bên trong nó là interface InnerInterface
. Lớp OuterClass
triển khai (implements) interface InnerInterface
và triển khai phương thức innerMethod()
. Khi chúng ta khởi tạo một đối tượng của lớp OuterClass
và gọi phương thức innerMethod()
, kết quả sẽ là “Hello from inner method”.
Trên đây là một số khái niệm cơ bản về interface trong Java. Sử dụng interface giúp chúng ta tạo ra mã nguồn linh hoạt, dễ bảo trì và tái sử dụng.
Nguồn: https://ispacedanang.edu.vn
Danh mục: Học tập