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.ệ