Interface trong JAVA | JAVA DEV

Một Interface trong Java là một bản kế hoạch của class. Nó có chứa static constant và abstract method (phương thức trừu tượng)

Interface trong JAVA
Interface trong Java là một chính sách để đạt được sự trừu tượng. Có thể chỉ có những phương pháp trừu tượng trong Interface, không có phần thân phương pháp. Nó được sử dụng để đạt được tính trừu tượng và đa thừa kế trong Java .
Nói cách khác, interface hoàn toàn có thể có những phương pháp trừu tượng và biến. Không có thân phương pháp .

  • Interface cũng đại diện cho mối quan hệ IS-A
  • Interface không thể khởi tạo như classs
  • Từ phiên bản JAVA 8, chúng ta có thể có phương thức default và static trong interface
  • Từ JAVA 9 thì có thể có phương thức private trong interface

Tại sao nên sử dụng interface trong JAVA?

Chủ yếu có ba lý do để sử dụng giao diện. Chúng được đưa ra dưới đây.

Bạn đang đọc: Interface trong JAVA | JAVA DEV

  • Sử dụng Interface để đạt được sự trừu tượng.
  • Interface có thể hỗ trợ chúng ta đạt được đa kế thừa (Vì Java mặc định không hỗ trợ đa kế thừa thông qua class).
  • Nó có thể được sử dụng để đạt được Loose coupling.

Ghi chú : Loose coupling là có nghĩa là giữa những class gần như độc lập. Nếu class A biết về class B qua những gì đã bộc lộ trong class B thì class A và class B là Loose coupling

Cách khai báo Interface trong JAVA

Một Interface trong Java được khai báo bằng cách sử dụng từ khóa interface. Nó cung cấp tổng thể trừu tượng; có nghĩa là tất cả các phương thức trong một interface được khai báo mà không có phần thân và tất cả các trường (field) là công khai (public), tĩnh (static) và cuối (final) cùng theo mặc định.

Một class tiến hành một interface phải thực thi toàn bộ những phương pháp được khai báo trong interface .
Cú pháp của interface trong Java :

interface {  
    // Khai báo constant fields  
    // Khai báo phương thức trừu tượng 
    // ... 
}  

Tham khảo: Cách đặt tên trong Java để biết cách đặt tên Interface tiêu chuẩn.

Cải tiến Interface trong JAVA 8

Kể từ Java 8, Interface hoàn toàn có thể có những phương pháp default và static sẽ được tranh luận sau .

Ghi chú: Trình biên dịch Java tự động thêm các từ khóa publicabstract trước phương thức trong Interface. Và nó cũng thêm các từ khóa public, staticfinal trước các data member. Do đó khi khai báo Interface chúng ta không cần thêm chúng.

Ví dụ tất cả chúng ta khai báo một interface thế này :

interface IInAn {
    int MIN = 5;
    void in();
}

Thì trình biên dịch sẽ hiểu / dịch như thế này :

interface IInAn {
    public static final int MIN = 5;
    public abstract void in();
}

Mối quan hệ giữa class và interface

Như trong hình bên dưới, một class mở rộng (extend) một class khác, một interface mở rộng (extend) một interface khác, nhưng một class sẽ triển khai (implements) một interface.

Mối quan hệ giữa class và interface trong Java

Lưu ý: Nếu bạn đang tích cực học Java để đi thực tập, đi làm. Hãy tham khảo ngay khóa học LẬP TRÌNH JAVA WEB tại NIIT – ICT Hà Nội để được hướng dẫn bởi chuyên gia doanh nghiệp, đào tạo theo nhu cầu thực tiễn, tuyển dụng ngay cuối khóa học!

Ví dụ về Interface trong JAVA

Trong ví dụ này, Interface IInAn chỉ có một phương pháp và việc tiến hành nó được phân phối trong class A6 .

// Khai báo Interface
interface IInAn{
    // Khai báo phương thức trừu tượng  
    void inThongTin(); 
}

// Triển khai interface
class A6 implements IInAn{
    // Viết khai triển cụ thể cho phương thức trừu tượng
    public void inThongTin(){
        System.out.println("Xin Chào");
    }
  
    public static void main(String args[]){  
        A6 a6 = new A6();
        a6.inThongTin();
    }
}

Kết quả khi chạy chương trình :

Xin chào

Tiếp tục một ví dụ khác về interface trong Java .
Trong ví dụ này, Interface IVeHinh chỉ có một phương pháp ve ( ). Việc tiến hành nó được cung ứng bởi những lớp HinhChuNhat và HinhTron .

Trong một kịch bản thực tế, một interface sẽ được định nghĩa bởi người khác, việc triển khai nó sẽ khác nhau bởi các lập trình viên khác nhau. Phần triển khai được ẩn bởi người dùng sử dụng interface.

// Khai báo Interface: User đầu tiên
interface IVeHinh{  
    void ve();  
}

// Triển khai: User thứ hai 
class HinhChuNhat implements IVeHinh{  
    public void ve(){
        System.out.println("Vẽ hình chữ nhật...");
    }  
}

class HinhTron implements IVeHinh{  
    public void ve(){
        System.out.println("Vẽ hình tròn...");
    }  
}

// Sử dụng interface: User thứ ba  
class TestInterface1{ 
    public static void main(String args[]){
        IVeHInh d = new HinhTron();
        d.ve();
    }
}  

Kết quả khi chạy chương trình :

Vẽ hình tròn...

Hãy thử xem một ví dụ khác về interface java cung ứng việc triển interface INganHang

interface INganHang{  
    float rateOfInterest();  
}
 
class Agri implements INganHang{  
    public float laiSuat(){
        return 0.07;
    }  
}

class VCB implements INganHang{  
    public float laiSuat(){
        return 0.08;
    }
}

class TestInterface2{  
    public static void main(String[] args){  
        INganHang nganHang = new VCB();  
        System.out.println("Lãi suất: " + nganHang.laiSuat() * 100 + "%");  
    }
}

Kết quả khi chạy chương trình :

Lãi suất: 8%

Đạt được tính đa kế thừa trong Java thông qua interface

Nếu một lớp Java tiến hành nhiều interface hoặc interface lan rộng ra nhiều interface, nó được gọi là đa thừa kế .
Đạt được đa kế thừa trong Java thông qua Interface
Ví dụ :

interface IInAn{  
    void inThongTin();  
}

interface IHienThi{  
    void hienThi();  
}

// Đa kế thừa
class A7 implements IInAn, IHienThi{  
    public void inThongTin(){
        System.out.println("Xin chào");
    }  
    public void hienThi(){
        System.out.println("Hiển thị bản xem trước");
    }

    public static void main(String args[]){
        A7 a7 = new A7();
        a7.inThongTin();
        a7.hienThi();
    }
}

Kết quả khi chạy chương trình :

Xin chào
Hiển thị bản xem trước

Câu hỏi: Đa kế thừa không được hỗ trợ thông qua class trong java, nhưng tại sao nó có thể được thực hiện bởi một interface?

Như tất cả chúng ta đã lý giải trong chương thừa kế trong Java, Java không tương hỗ đa thừa kế class vì sự mơ hồ .
Tuy nhiên, vì đa thừa kế trải qua interface không mơ hồ nên nó được tương hỗ. Việc tiến hành của nó được cung ứng bởi class thực thi. Ví dụ :

interface IInAn{  
    void inThongTin();  
}  
interface IHienThi{  
    void hienThi();  
}  

class TestInterface3 implements IInAn, IHienThi{  
    public void inThongTin(){
        System.out.println("Xin chào");
    }
    public static void main(String args[]){  
        TestInterface3 obj = new TestInterface3();  
        obj.inThongTin();  
    }
}

Kết quả khi chạy chương trình :

Xin chào

Kế thừa interface

Trong Java, một class tiến hành ( implements ) một interface, nhưng một interface này lan rộng ra ( extends ) một interface khác .

interface IInAn{  
    void inThongTin();  
}
 
interface IHienThi extends IInAn{  
    void hienThi();
}

class TestInterface4 implements Showable{  
    public void inThongTin(){
        System.out.println("Xin chào");
    }  
    public void hienThi(){
        System.out.println("Hiển thị bản xem trước");
    }  
  
    public static void main(String args[]){  
        TestInterface4 obj = new TestInterface4();  
        obj.inThongTin();  
        obj.hienThi();  
 }
}

Kết quả khi chạy chương trình :

Xin chào
Hiển thị bản xem trước

Phương thức default của Java 8 trong interface

Kể từ Java 8, tất cả chúng ta hoàn toàn có thể có thân phương pháp trong interface. Nhưng tất cả chúng ta cần đặt nó thành phương pháp default. Hãy xem một ví dụ :

interface IVeHinh{  
    void ve();  
    default void msg(){
        System.out.println("Phương thức default");
    }  
}

class HinhChuNhat implements IVeHinh{  
    public void ve(){
        System.out.println("Vẽ hình chữ nhật");
    }
}

class TestInterfaceDefault{
    public static void main(String args[]){  
        IVeHinh hinhChuNhat = new HinhChuNhat();  
        hinhChuNhat.ve();  
        hinhChuNhat.msg();  
    }
}

Kết quả khi chạy chương trình :

Vẽ hình chữ nhật
Phương thức default

Câu hỏi: Interface được đánh dấu (marker) hoặc được gắn thẻ (tagged) là gì?

Một interface không có data thành viên nào được gọi là marker interface hoặc tagged interface .

Ví dụ: Serializable, Cloneable, Remote, v.v. Chúng được sử dụng để cung cấp một số thông tin cần thiết cho JVM để JVM có thể thực hiện một số hành vi.

Interface lồng nhau trong Java

Một interface hoàn toàn có thể có một interface khác được gọi là interface lồng nhau ( Nested Interface ). Chúng ta sẽ tìm hiểu và khám phá nó một cách chi tiết cụ thể trong chương Nested Class. Ví dụ :

interface IInAn{  
    void in();
    
    // Interface được lồng trong interface khác
    interface IThongTinInAn{  
        void thongTin();  
    }
}

Như vậy, qua bài viết này, mình đã hướng dẫn bạn tìm hiểu về interface trong Java, và cùng với các ví dụ đơn giản hi vọng bạn hiểu được cách khai báo, triển khai và đạt được tính đa kế thừa thông qua interface.

Chúc bạn học tốt !