Sự mở rộng (kế thừa) của các interface

Một phần của tài liệu Bài giảng Lập trình Java (Trang 54)

d) Chương trình ứng dụn gở dạng Applet lẫn dạng độc lập

4.7.2 Sự mở rộng (kế thừa) của các interface

Giống như cấu trúc lớp, interface cũng có thể được mở rộng từ nhiều interface khác bằng mệnh đề extends. Tuy nhiên, khác với sự mở rộng tuyến tính của các lớp, các interface được phép mở rộng không tuyến tính, nghĩa là có thể mở rộng nhiều hơn một interface.

Ví dụ:

class MyClass implements Interface1, Interface2{ //Cài đặt một số hàm mẫu của Interface1, Interface2; }

interface Interface1{

//Khai báo các hằng và hàm mẫu; }

interface Interface2{

//Khai báo các hằng và hàm mẫu; }

Ví dụ: Cách xây dựng và sử dụng các interface

interface IStack{ //(1)

void push(Object item); Object pop();

}

class StackImp implements IStack{ //(2)

protected Object[] stackArray; //Bo sung mang doi tuong

protected int tos; //Bo sung bien tos

public StackImp(int capacity){

stackArray = new Object[capacity]; tos = -1;

public void push(Object item){ //Cai dat ham push (3) stackArray[++tos]=item;

}

public Object pop(){ //Cai dat ham pop (4) Object obj = stackArray[tos];

stackArray[tos] = null; tos--;

return obj; }

public Object peek(){ //Bo sung ham peek (5) return stackArray[tos];

} }

//Xay dung them interface ISafeStack ke thua IStack de kiem tra cac trang thai //cua Stack dam bao an toan khi thao tac

interface ISafeStack extends IStack{ //(6)

boolean isEmpty(); boolean isFull(); }

//Xay dung lop de cai dat cac ham cua ISafeStack (7)

class SafeStackImp extends StackImp implements ISafeStack{ public SafeStackImp(int capacity){super(capacity);}

public boolean isEmpty(){return tos<0;}

public boolean isFull(){return tos == stackArray.length - 1;}

}

//Xay dung lop su dung cac lop va giao dien da cai dat o tren

public class StackUser {

public static void main(String[] args) {

SafeStackImp safe1 = new SafeStackImp(80); //(8)

StackImp s1 = safe1; //(9)

ISafeStack iSafe1 = safe1; //10

IStack iS1 = safe1; Object obj = safe1;

safe1.push("Khoa CNTT"); s1.push("DHQG");

System.out.println(iSafe1.pop()); //(11) System.out.println(iS1.pop()); //(12) System.out.println(obj.getClass()); //(13)

} }

Kết quả thực hiện chương trình:

Lưu ý:

 Các hàm mẫu của interface được mặc định là abstact và không được khai báo static.

 Một lớp có thể chọn một số hàm mẫu để cài đặt, nghĩa là có thể chỉ cài đặt một phần của giao diện interface (nếu là lớp abstract, nếu không thì phải cài đặt tất cả hàm trong interface).

 Tất cả các phương thức trong các giao diện phải là kiểu public. Bạn không được sử dụng các bổ ngữ (modifers) chuẩn khác như protected, private… khi khai báo các phương thức trong một giao diện.

 Một giao diện có thể kế thừa từ nhiều hơn một giao diện.

 Một giao diện có thể kế thừa từ nhiều hơn một giao diện và lớp.

 Ngoài ra cũng cần chú ý thêm rằng, các giao diện interface có thể định nghĩa các hằng (constant). Tất cả các thuộc tính dữ liệu trong interface luôn được xem mặc định là public static final.

Ví dụ: Các biến hằng trong interface //Tinh.java interface Constants{ double PI = 3.14; String DON_VI_DT = "cm2"; String DON_VI_CV = "cm"; }

public class Tinh implements Constants { public static void main(String[] args) {

double banKinh = 15.00;

System.out.println("Dien tich hinh tron ban kinh " + banKinh + " la " + (PI*banKinh*banKinh) + DON_VI_DT); //(1)

System.out.println("Chu vi hinh tron ban kinh " + banKinh + " la " + (2*PI*banKinh) + Constants.DON_VI_CV); //(2)

} }

Các biến trong interface mặc định là public static final do vậy khi truy nhập chúng có thể truy nhập trực tiếp (1) hoặc thông qua tên interface (2).

CHƯƠNG 5

CÁC LỆNH CÓ CẤU TRÚC VÀ XỬ LÝ NGOẠI LỆ

Một phần của tài liệu Bài giảng Lập trình Java (Trang 54)

Tải bản đầy đủ (DOC)

(138 trang)
w