interface-trong-java

Một Interface trong Java là một bản thiết kế của một lớp. Nó chỉ có các phương thức trừu tượng. Interface là một kỹ thuật để thu được tính trừu tượng hoàn toàn và đa kế thừa trong Java. Interface trong Java cũng biễu diễn mối quan hệ IS-A. Nó không thể được khởi tạo giống như lớp trừu tượng.

>> Xem ngay Tài liệu Java Core giúp bạn “Nâng Cấp” kỹ năng lập trình

Nói cách khác, các trường của Interface là public, static và final theo mặc định và các phương thức là public và abstract.

Một Interface trong Java là một tập hợp các phương thức trừu tượng (abstract). Một class triển khai một interface, do đó kế thừa các phương thức abstract của interface.

Một interface không phải là một lớp. Viết một interface giống như viết một lớp, nhưng chúng có 2 định nghĩa khác nhau. Một lớp mô tả các thuộc tính và hành vi của một đối tượng. Một interface chứa các hành vi mà một class triển khai.

Trừ khi một lớp triển khai interface là lớp trừu tượng abstract, còn lại tất cả các phương thức của interface cần được định nghĩa trong class.

Một interface tương tự với một class bởi những điểm sau đây:

  • Một interface được viết trong một file với định dạng .java, với tên của interface giống tên của file.
  • Bytecode của interface được lưu trong file có định dạng .class.
  • Khai báo interface trong một package, những file bytecode tương ứng cũng có cấu trúc thư mục có cùng tên package.

Một interface khác với một class ở một số điểm sau đây:

  • Bạn không thể khởi tạo một interface.
  • Một interface không chứa bất cứ hàm Contructor nào.
  • Tất cả các phương thức của interface đều là abstract.
  • Một interface không thể chứa một trường nào trừ các trường vừa static và final.
  • Một interface không thể kế thừa từ lớp, nó được triển khai bởi một lớp.
  • Một interface có thể kế thừa từ nhiều interface khác.

Ví dụ về Interface Java

public interface Shape { //implicitly public, static and final public String LABLE="Shape"; //interface methods are implicitly abstract and public void draw(); double getArea(); }
Code language: PHP (php)

Khi ghi đè các phương thức được định nghĩa trong interface, có một số qui tắc sau:

  • Các checked exception không nên được khai báo trong phương thức implements, thay vào đó nó nên được khai báo trong phương thức interface hoặc các lớp phụ được khai báo bởi phương thức interface.
  • Signature (ký số) của phương thức interface và kiểu trả về nên được duy trì khi ghi đè phương thức (overriding method).
  • Một lớp triển khai chính nó có thể là abstract và vì thế các phương thức interface không cần được triển khai.

Khi triển khai interface, có vài quy tắc sau:Một lớp có thể triển khai một hoặc nhiều interface tại một thời điểm.Một lớp chỉ có thể kế thừa một lớp khác, nhưng được triển khai nhiều interface.Một interface có thể kế thừa từ một interface khác, tương tự cách một lớp có thể kế thừa lớp khác.

Implement interface trong Java

Bây giờ chúng ta hãy xem một số implement của interface Shape của tôi trong Java.

Circle.java

public class Circle implements Shape {

	private double radius;

	public Circle(double r){
		this.radius = r;
	}
	
	@Override
	public void draw() {
		System.out.println("Drawing Circle");
	}
	
	@Override
	public double getArea(){
		return Math.PI*this.radius*this.radius;
	}

	public double getRadius(){
		return this.radius;
	}
}

Lưu ý rằng lớp Circle đã implement tất cả các phương thức được định nghĩa trong interface và nó có một số phương thức riêng cũng như getRadius(). Việc implement interface có thể có nhiều loại hàm tạo. Cho phép xem implement interface khác cho interface Shape.

Kế thừa Interface trong Java

Một lớp triển khai Interface nhưng một Interface kế thừa từ Interface khác.

interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class Testinterface2 implements Showable{ public void print() { System.out.println("Hello"); } public void show() { System.out.println("Welcome"); } public static void main(String args[]){ Testinterface2 obj = new Testinterface2(); obj.print(); obj.show(); } }
Code language: PHP (php)

Marker (hay Tagging) Interface trong Java là gì?

Đó là một Interface mà không có thành viên nào. Ví dụ: Serializable, Cloneable, Remote, … Chúng được sử dụng để cung cấp một số thông tin thiết yếu tới JVM để mà JVM có thể thực hiện một số hoạt động hữu ích.

public interface Serializable { }
Code language: PHP (php)

Có hai mục đích thiết kế chủ yếu của tagging interface là:

  • Tạo một cha chung: Như với EventListener interface, mà được kế thừa bởi hàng tá các interface khác trong Java API, bạn có thể sử dụng một tagging interface để tạo một cha chung cho một nhóm interface. Ví dụ, khi một interface kế thừa EventListener, thì JVM biết rằng interface cụ thể này đang được sử dụng trong một event.
  • Thêm một kiểu dữ liệu tới một class: Đó là khái niệm tagging. Một class mà triển khai một tagging interface không cần định nghĩa bất kỳ phương thức nào, nhưng class trở thành một kiểu interface thông qua tính đa hình (polymorphism).

Interface lồng nhau trong Java

Một Interface có thể có Interface khác, đó là lồng Interface. Chúng ta sẽ tìm hiểu chi tiết trong chương về Lồng các lớp trong Java. Ví dụ:

interface printable{ void print(); interface MessagePrintable{ void msg(); } }
Code language: PHP (php)

Đó là tất cả đối với interface Java. Nếu tôi bỏ lỡ bất cứ điều gì quan trọng, xin vui lòng cho tôi biết thông qua các bình luận.

Happy learning!!!

Học Java Core

Bài viết liên quan

Leave a Reply

Your email address will not be published.