http://vietjack.com/java/index.jsp Copyright © vietjack.com Interface Java Một Interface Java blueprint lớp Nó có tĩnh có phương thức trừu tượng Interface kỹ thuật để thu tình trừu tượng hoàn toàn đa kế thừa Java Interface Java biễu diễn mối quan hệ IS-A Nó thuyết minh giống lớp trừu tượng Ghi chú: Java Compiler thêm từ khóa public abstract trước phương thức interface từ khóa public, static final trước thành viên liệu Nói cách khác, trường Interface public, static final theo mặc định phương thức public abstract Một Interface Java tập hợp phương thức trừu tượng (abstract) Một class triển khai interface, kế thừa phương thức abstract interface Một interface lớp Viết interface giống viết lớp, chúng có định nghĩa khác Một lớp mô tả thuộc tính hành vi đối tượng Một interface chứa hành vi mà class triển khai Trừ lớp triển khai interface lớp trừu tượng abstract, lại tất phương thức interface cần định nghĩa class Một interface tương tự với class điểm sau đây: Một interface bao gồm lượng phương thức Một interface viết file với định dạng java, với tên interface với tên file Bytecode interface xuất class file Interface xuất package, bytecode file tương ứng phải cấu trúc thư mục có tên package Mặc dù vây, interface khác với class số điểm sau đây, bao gồm: Bạn khởi tạo interface Một interface không chứa hàm contructor http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com Tất phương thức interface abstract Một interface chứa trường trừ trường vừa static final Một interface kế thừa từ lớp, triển khai lớp Một interface kế thừa từ nhiều interface khác Ví dụ đơn giản Interface Java Trong ví dụ này, Printable Interface có phương thức, trình triển khai cung cấp lớp A interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println("Hello");} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } } Khi ghi đè phương thức định nghĩa interface, có số qui tắc sau: Các checked exception không nên khai báo phương thức implements, thay vào nên khai báo phương thức interface lớp phụ khai báo phương thức interface Signature (ký số) phương thức interface kiểu trả nên trì ghi đè phương thức (overriding method) Một lớp triển khai abstract phương thức interface khơng cần triển khai Khi triển khai interface, có vài quy tắc sau: http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com Một lớp triển khai nhiều interface thời điểm Một lớp kế thừa lớp khác, triển khai nhiều interface Một interface kế thừa từ interface khác, tương tự cách lớp kế thừa lớp khác Đa kế thừa Java Interface Nếu lớp triển khai đa kế thừa, Interface kế thừa từ nhiều Interface đa kế thừa interface Printable{ void print(); } interface Showable{ void show(); } class A7 implements Printable,Showable{ public void print(){System.out.println("Hello");} public void show(){System.out.println("Welcome");} public static void main(String args[]){ A7 obj = new A7(); obj.print(); obj.show(); } } Câu hỏi: Đa kế thừa không hỗ trợ thông qua lớp Java Interface, sao? http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com Như đa thảo luận chương tính kế thừa, đa kế thừa khơng hỗ trợ thơng qua lớp Nhưng hỗ trợ Interface khơng có tính lưỡng nghĩa trình triển khai cung cấp lớp Implementation Ví dụ: interface Printable{ void print(); } interface Showable{ void print(); } class TestTnterface1 implements Printable,Showable{ public void print(){System.out.println("Hello");} public static void main(String args[]){ TestTnterface1 obj = new TestTnterface1(); obj.print(); } } Trong ví dụ trên, Printable Showable interface có phương thức trình triển khai cung cấp lớp TestInterface1, khơng có tính lưỡng nghĩa Kế thừa Interface Java Một lớp triển khai Interface 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");} http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com public static void main(String args[]){ Testinterface2 obj = new Testinterface2(); obj.print(); obj.show(); } } Marker (hay Tagging) Interface Java gì? Đó Interface mà khơng có thành viên Ví dụ: Serializable, Cloneable, Remote, … Chúng sử dụng để cung cấp số thông tin thiết yếu tới JVM JVM thực số hoạt động hữu ích //Cach Serializable interface duoc viet? public interface Serializable{ } Có hai mục đích thiết kế chủ yếu tagging interface là: Tạo cha chung: Như với EventListener interface, mà kế thừa hàng tá interface khác Java API, bạn sử dụng tagging interface để tạo cha chung cho nhóm interface Ví dụ, interface kế thừa EventListener, JVM biết interface cụ thể sử dụng event Thêm kiểu liệu tới class: Đó khái niệm tagging Một class mà triển khai tagging interface không cần định nghĩa phương thức nào, class trở thành kiểu interface thơng qua tính đa hình (polymorphism) Lồng Interface Java Ghi chú: Một Interface có Interface khác, lồng Interface Chúng ta tìm hiểu chi tiết chương Lồng lớp Java Ví dụ: interface printable{ void print(); interface MessagePrintable{ void msg(); http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/java/index.jsp Copyright © vietjack.com } } http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... } Trong ví dụ trên, Printable Showable interface có phương thức trình triển khai cung cấp lớp TestInterface1, khơng có tính lưỡng nghĩa Kế thừa Interface Java Một lớp triển khai Interface Interface... tagging interface không cần định nghĩa phương thức nào, class trở thành kiểu interface thơng qua tính đa hình (polymorphism) Lồng Interface Java Ghi chú: Một Interface có Interface khác, lồng Interface. .. Một interface kế thừa từ nhiều interface khác Ví dụ đơn giản Interface Java Trong ví dụ này, Printable Interface có phương thức, trình triển khai cung cấp lớp A interface printable{ void print();