Giao diện và sự mở rộng quan hệ kế thừa trong Java

Một phần của tài liệu Lap Trinh huong doi tuong JAVA (Trang 85 - 89)

 Java không hỗ trợ trực tiếp kế thừa bội, song để tránh những trở ngại trên Java cung cấp khái niệm interface và cho phép kế thừa bội đối với các interface.

Định nghĩa interface

interface định nghĩa mẫu hợp đồng thông qua việc phác thảo các hàm mẫu (prototype) và không cài đặt nội dung thực hiện.

interface <Tên interface > { <Nội dung của interface > }

<Nội dung của interface> thường chứa danh sách các hàm mẫu và các hằng.

Giao diện interface là loại kiểu lớp đặc biệt, trong đó tất cả các hàm thành phần đều là trừu tượng, do vậy không thể khởi tạo được giá trị, nghĩa là không thể tạo ra đối tượng của interface. Những hàm trong interface sẽ được cài đặt ở những lớp xây dựng mới theo dạng:

class <Tên lớp> implements <Tên interface> { // Bổ sung các thành phần;

// Cài đặt các hàm mẫu đã cho trong <Tên interface>; }

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ụ 6.19 Cách xây dựng và sử dụng các interface

interface IStack{ // (1) void push(Object item); Object pop();

}

class StackImpl implements IStack {// (2)

protected Object[] stackArray; // Bổ sung mảng đối tượng protected int tos; // Bổ sung biến tos

public StackImpl(int capacity) {

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

}

stackArray[++tos] = item; }

public Object pop() { // Cài đặt hàm pop() (4) Object obj = stackArray[tos];

stackArray[tos] = null; tos--;

return obj; }

public Object peek() { // Bổ sung hàm peek() (5) return stackArray[tos];

} }

// Xây dựng thêm interface IsafeStack kế thừa Istack để kiểm tra các trạng thái của

// Stack đảm bảo an toàn khi thao tác. interface ISafeStack extends IStack { // (6)

boolean isEmpty(); boolean isFull(); }

// Xây dựng lớp để cài đặt các hàm của IsafeStack // (7)

class SafeStackImpl extends StackImpl implements ISafeStack { public SafeStackImpl(int capacity) {super(capacity);}

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

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

// Xây dựng lớp sử dụng các lớp và giao diện đã cài đặt ở trên public class StackUser {

public static void main(String args[]){

SafeStackImpl safe1 = new SafeStackImpl(80); // (8) StackImpl s1 = safe1; // (9)

ISafeStack iSafe1 = safe1; // (10) IStack iS1 = safe1;

Object obj = safe1;

safe1.push(“Khoa CNTT”); s1.push(“ĐHQG”); 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: ĐH QG

Khoa CNTT

class SafeStackImpl

Lưu ý:

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

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

Bài tập

1. Xây dựng lớp phân số và thực hiện các phép toán +,-,*,/ hai phân số. 2. Xây dựng lớp SinhVien có các thuộc tính riêng (private):

 Số báo danh  Họ và tên  Địa chỉ  Môn học  Điểm thi

 Viết hàm truy nhập tới các thành phần dữ liệu và phép toán tạo lập cho lớp

SinhVien

 Viết chương trình chính để tạo ra danh sách SinhVien và hiển thị thực đơn:  Nhập thông tin về sinh viên

 Xem thông tin về sinh viên  Tìm thông tin theo điểm  Kết thúc chương trình

Chương VII: Lập trình ứng dụng Applet và AWT

Nội dung:

 Lập trình applet,

 Các thành phần của AWT và giao diện đồ họa GUI,  Các lớp xử lý đồ họa,

 Xử lý hình ảnh và âm thanh trong các chương trình applet.

Một phần của tài liệu Lap Trinh huong doi tuong JAVA (Trang 85 - 89)

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

(149 trang)
w