Giao diện

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 61 - 63)

IX.1 Cấu trỳc của giao diện

Trong Java khụng hỗ trợ tớnh đa thừa kế. Tuy nhiờn, Java hỗ trợ một kỹ thuật thay thế và rất linh hoạt, đú là cỏc interface hay cũn gọi là cỏc giao diện.

Giao diện khụng phải là một class nhưng nú chỉ ra cỏc phương thức sẽ được định nghĩa trong cỏc lớp cài đặt nú. Cỏc lớp cú sử dụng tới cỏc phương thức này phải khai bỏo cài đặt giao diện bằng từ khúa implement.

Cấu trỳc của một giao diện rất đơn giản: public interface <tờn giao diện>

{

//Danh sỏch cỏc phương thức }

Tại lớp cú cài đặt giao diện:

public class <tờn lớp> implements <tờn giao diện> {

//Phõn thõn lớp cú chứa định nghĩa phương thức của giao diện }

Vớ dụ:

Trong lớp Arrays của Java cú phương thức sort dựng để sắp xếp cỏc đối tượng trong một mảng. Tuy nhiờn, muốn sắp xếp được thỡ trong định nghĩa lớp của cỏc đối tượng này phải cú cài đặt một phương thức so sỏnh compareTo(Object objKhac). Mở rộng hơn, tất cả cỏc lớp muốn sử dụng phương thức sort của Array đều phải cài đặt phương thức này trong định nghĩa của nú. Điều này dẫn đến việc thiết kế một giao diện:

public interface Comparable {

int compareTo(Object objKhac); }

Phương thức compareTo nhận một đối tượng khỏc làm tham số và là đối tượng đem ra so sỏnh, kết quả so sỏnh biểu hiện qua một số nguyờn.

Từ phiờn bản Java 5.0 (1.5), cỏc giao diện cú thể được xỏc định cho một kiểu tổng quỏt: public interface Comparable<T>

{

int compareTo(T objKhac); }

Vớ dụ cỏc lớp muốn cài đặt giao diện Comparable<Employee> phải cài đặt phương thức int compareTo(Employee objKhac);

Tất cả cỏc phương thức khai bỏo trong interface mặc định là public nờn ta khụng cần khai bỏo public cho nú.

Bõy giờ chỳng ta định nghĩa: x.compareTo(y) <0 nếu x < y x.compareTo(y) =0 nếu x = y x.compareTo(y) >0 nếu x > y

Trong interface ta đang xem xột thỡ nú chỉ cú một phương thức. Cỏc interface thường cú nhiều phương thức, cỏc hằng số. Tuy nhiờn trong interface ta khụng thể khai bỏo cỏc biến thành phần và khụng thể cài đặt nội dung của cỏc phương thức. Cỏc interface cú thể xem như cỏc lớp trừu tượng khụng cú thuộc tớnh thành phần tuy rằng chỳng cú nhiều điểm khỏc biệt.

Trong phần sau đõy chỳng ta sẽ cài đặt một phương thức compareTo cho việc so sỏnh cỏc đối tượng Employee.

Khai bỏo cài đặt Comparable cho Employee: class Employee implements Comparable

Giả sử cỏc Employee được so sỏnh thụng qua tiờu chớ Luong, ta cài đặt compareTo như sau:

public int compareTo(Object objKhac) {

Employee other = (Employee) objKhac; // Chuyển kiểu if (Luong < other.Luong) return -1;

if (Luong > other.Luong) return 1; return 0;

}

Chỳ ý rằng cỏc phương thức trong interface khụng khai bỏo public nhưng khi cài đặt chỳng, nhất định ta phải cú khai bỏo public.

Đối với phiờn bản Java 5.0, ta cú thể cài đặt:

class Employee implements Comparable<Employee> {

public int compareTo(Employee objKhac) {

if (Luong < objKhac.Luong) return -1; if (Luong > objKhac.Luong) return 1; return 0;

} . . . }

Đối với lớp Manager thỡ sao. Rừ ràng là một đối tượng Manager vẫn cú thể được so sỏnh với một đối tượng Employee về tiền lương. Tuy nhiờn nếu ta cũng khai bỏo chồng một phương thức compareTo() thỡ khụng được do vi phạm quy tắc chuyển kiểu:

class Manager extends Employee {

public int compareTo(Employee objKhac) {

Manager otherManager = (Manager) objKhac; // khụng được . . .

} . . . }

May mắn là ta khụng cần làm điều này vỡ tớnh kế thừa đó đảm bảo Manager cài đặt Comparable<Employee> chứ khụng phải Comparable<Manager>. Khi đưa một đối tượng Manager vào làm tham số so sỏnh, nú tự động được ộp sang kiểu Employee. Việc so sỏnh vỡ thế diễn ra thoải mỏi giữa cỏc đối tượng Employee và Manager với nhau.

IX.2 Cỏc tớnh chất của giao diện

Khi sử dụng interface ta cần chỳ ý mấy điểm sau:

• Giao diện khụng phải là class nờn khụng dựng từ khúa new để tạo một đối tượng kiểu giao diện:

x = new Comparable(. . .); // Lỗi • Cú thể khai bỏo một biến interface Comparable x; // OK

Biến interface phải tham chiếu tới một đối tượng của một lớp cú cài đặt interface đú. x = new Employee(. . .); // OK

• Cú thể dựng toỏn tử instanceof để kiểm tra xem một đối tượng cú được cài đặt interface hay khụng: if (anObject instanceof Comparable) { . . . }

• Cỏc interface cũng cú thể được kế thừa • Cú thể khai bỏo cỏc hằng số trong interface public interface Comparable<Employee>

{

double greater = 1;

int compareTo(Employee other); }

Trong interface, khai bỏo “double greater =1” được tự động hiểu là: public static final double greater =1;

Cỏc lớp cú cài đặt interface cũng tự động được thừa kế cỏc hằng số này.

• Một lớp chỉ cú thể kế thừa từ một lớp khỏc trong khi cú thể cài đặt nhiều giao diện.

Một phần của tài liệu Bài giảng ngôn ngữ lập trình Java doc (Trang 61 - 63)

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

(148 trang)
w