Ở bài trước chúng ta đã biết được cách sử dụng tính trừu tượng là kế thừa một lớp abstract. Hôm nay mình sẽ hướng dẫn các bạn cách sử dụng tính trừu tượng bằng cách kế thừa từ một interface trong java.
Một interface trong java có tất cả các phương thức đều là abstract hết. Các class triển khai từ một interface.
Cách dùng interface trong java
Các bạn xem ví dụ dưới đây
interface animal{ void eating(); } class Dog implements animal{ @Override public void eating() { System.out.println("Dog eating"); } } public class TEST { public static void main(String[] args){ Dog dog = new Dog(); dog.eating(); } }
Dog eating
Trong java trình biên dịch tự động thêm từ khóa public và abstract trước phương thức của interface và các từ khóa public, static và final trước các thành viên dữ liệu.
Ta có các quy tắc như sau:
- Một interface không thể có constructor hay bạn không thể khởi tạo một interface.
- Tất cả các phương thức của interface đều là abstract.
- Một interface có thể được kế thừa từ một interface khác.
- Một interface không thể được kế thừa từ một lớp.
- Một class chỉ được kế thừa từ một class khác, nhưng một class có thể được triển khai từ nhiều interface.
- Bạn phải dùng từ khóa implements để triển khai interface.
Kế thừa trong interface
Bạn có thể triển khai class từ một interface đã được kế thừa.
interface animal{ void eat(); } interface dog extends animal{ void drink(); } class BabyDog implements dog{ @Override public void eat() { System.out.println("Eating"); } @Override public void drink() { System.out.println("Dinking"); } } public class TEST { public static void main(String[] args){ BabyDog dog = new BabyDog(); dog.eat(); dog.drink(); } }
Eating Dinking
Trong ví dụ trên interface dog được kế thừa từ interface animal. Sau đó class BabyDog triển khai interface dog và phải overriding lại hai phương thức eat
và drink
.
Lồng interface
Một interface có thể chứa một interface khác, đó gọi là lông interface.
interface animal{ interface dog{ void drink(); } } class BabyDog implements animal.dog{ @Override public void drink() { System.out.println("Drinking"); } } public class TEST { public static void main(String[] args){ BabyDog dog = new BabyDog(); dog.drink(); } }
Drinking
Sự khác nhau giữa Interface và Abstract class.
STT | Interface | Abstract class |
1 | Chỉ có phương thức abstract. | Có phương thức abstract và non-abstract. |
2 | Có thể đa kế thừa. | Chỉ có thể kế thừa từ một class. |
3 | Interface chỉ có các biến static và final. | Abstract class có các biến final, non-final, static and non-static. |
4 | Sử dụng từ khác interface để khai báo. | Sử dụng từ khóa abstract để khai báo. |
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận