Ở 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.
Interface là gì?
Interface là một lớp rỗng chỉ chứa khai báo về tên phương thức không có khai báo về thuộc tính hay thứ gì khác và các phương thức này cũng là rỗng. Bởi vậy bất kỳ lớp nào sử dụng lớp interface đều phải định nghĩa các phương thức đã khai báo ở lớp interface, nếu cố tình không khai báo thì Java sẽ báo lỗi, để sử dụng lớp interface bạn chỉ việc khai báo với từ khóa implements và một lớp có thể sử dụng nhiều interface cũng như vừa có thể kế thừa từ lớp khác và đồng thời sử dụng interface.
1 |
<subclass> extends <superclass> implements <interface1>,<interface2> |
– Cấu trúc định nghĩa :
1 2 3 4 5 6 |
interface <InterfaceName> { <dataType1> <var1>; <dataType2> <var2>; <ReturnType1> <methodName1> (); <ReturnType2> <methodName2> (<parameters>); } |
Interface trong lập trình hướng đối tượng
– Thể hiện tính bao đóng trong lập trình hướng đối tượng
– Hỗ trợ đa kế thừa : Một lớp có thể thừa kế một lớp và hiện thực nhiều giao diện
– Lớp hiện thực giao diện phải hiện thực tất cả các hàm được đặc tả trong giao diện đó.
– Hàm khai báo có đặc tả ẩn là public và abstract
– Biến khai báo có đặc tả ẩn là public, static và final
Ví dụ : Interface trong lập trình hướng đối tượng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
interface ParentOne{ int pOne = 1; void printParentOne(); } interface ParentTwo{ int pTwo = 2; void printParentTwo(); } interface Child extends ParentOne, ParentTwo{ int child = 3; void printChild(); } class InheritClass implements Child{ public void printParentOne(){ System.out.println(pOne); } public void printParentTwo(){ System.out.println(pTwo); } public void printChild(){ System.out.println(child); } } public class TestInterface{ public static void main(String[] args){ InheritClass ic = new InheritClass(); ic.printParentOne(); ic.printParentTwo(); ic.printChild(); } } |
Khi nào sử dụng Abstract class và Interface trong Java
Dưới đây là một vài hướng dẫn khi nào nên sử dụng abstract class và interface trong Java:
- Hãy sử dụng abstract class nếu bạn dự định sử dụng kế thừa và cung cấp base class phổ thông cho những class bắt nguồn từ nó.
- Abstract class cũng rất hữu dụng nếu bạn muốn có thể biểu thị những phần tử không public. Trong một interface, tất cả các method phải là public.
- Nếu bạn nghĩ rằng mình cần phải thêm method trong tương lai thì abstract class sẽ là phương án tốt hơn cho bạn. Điều này là vì nếu bạn thêm những method rỗng vào trong interface thì tất cả các class vốn dĩ đã implement interface này phải thay đổi hết sang implement những method mới đó nữa. (điều này được khác phục trong java 8).
- Interface sẽ là lựa chọn tốt nếu bạn nghĩ rằng API sẽ không thay đổi trong tương lai gần.
- Interface cũng rất tốt nếu bạn muốn có kiểu đa kế thừa trong hệ thống khi bạn có thể tạo nhiều interface và bắt class implement chúng.
Lời kết : Interface trong lập trình hướng đối tượng Java không quá khó nếu như bạn nắm được ý nghĩa cốt lõi của nó, khác với abstract class có thể có phương thức không phải abstract thì ở Interface 100% các phương thức đều là trừu tượng (abstract) và mục đích của bạn là bắt các lớp kế thừa hay hiện thực nó phải định nghĩa lại hoàn toàn các phương thức abstract đó.
Chúc bạn thành công!
Leave a Reply