T khoá interface ã a khái ni m abstract i xa thêm m t b c n a. Ta có th ngh nó nh là m t l p abstract “thu n tuý”, nó cho phép ta t o ra m t l p thu n o, l p này ch g m t p các giao di n cho các l p mu n d n xu t t nó, m t interface c ng có th có các tr ng, tuy nhiên java t ng làm các tr ng này thành staticvà final
t o ra m t interface, ta dùng t khoá interface thay vì t khoá class. M t interface g m có 2 ph n: ph n khai báo và ph n thân, ph n khai báo cho bi t m t s thông tin nh : tên c a interface, nó có k th a t m t giao di n khác hay không. Ph n thân ch a các khai báo h ng, khai báo ph ng th c ( nh ng không có cài t). Gi ng nh m t l p ta c ng có th thêm b t public vào tr c nh ngh a c a interface. Sau ây là hình nh c a m t interface.
Nh ng do java t ng làm các tr ng thành final nên ta không c n thêm b t này, do v y ta có th nh ngh a l i giao di n nh sau:
Nh ng do java t ng làm các tr ng thành finalnên ta không c n thêm b t này
public interface StockWatcher
{
final String
sunTicker = "SUNW";
final String oracleTicker = "ORCL"; final String ciscoTicker = "CSCO";
void valueChanged(String tickerSymbol, double newValue); }
1. Ph n khai báo c a giao di n
T ng quát ph n khai báo c a m t giao di n có c u trúc t ng quát nh sau:
Public //giao di n này là công c ng
interface InterfaceName //tên c a giao di n
Extends SuperInterface //giao di n này là m r ng c a 1 giao di n khác
{
InterfaceBody }
//thân c a giao di n
Trong c u trúc trên có 2 ph n b t bu c ph i có ó là ph n interface vàInterfaceName, các ph n khác là tu ch n.
2. Ph n thân
Ph n thân khai báo các các h ng, các ph ng th c r ng ( không có cài t ), các ph ng th c này ph i k t thúc v i d u ch m ph y ‘;’, b i vì chúng không có ph n cài t
Chú ý:
1. T t c các thành ph n c a m t giao di n t ng là public do v y ta không c n ph i cho b t này vào.
2. Java yêu c u t t c các thành ph n c a giao di n ph i là public, n u ta thêm các b t khác nh private,protectedtr c các khai báo thì ta s nh n c m t l i lúc d ch 3. T t c các tr ng t ng là finalvà static, nên ta không c n ph i cho b t này vào.
3. Tri n khai giao di n
B i m t giao di n ch g m các mô t chúng không có ph n cài t, các giao di n c nh ngh a cho các l p d n xu t tri n khai, do v y các l p d n xu t t l p này ph i tri n khai y t t c các khai báo bên trong giao di n, tri n khai m t giao di n b n bao g m t khoá implements vào ph n khai báo l p, l p c a b n có th tri n khai m t ho c nhi u giao di n ( hình th c này t ng t nh k th a b i c a C++)
Ví d 1
public classStockApplet extendsApplet implements StockWatcher { .. .
public voidvalueChanged(String tickerSymbol, double newValue) {
if (tickerSymbol.equals(sunTicker)) { .. . }else if (tickerSymbol.equals(oracleTicker)) { .. . }else if (tickerSymbol.equals(ciscoTicker)) { .. . } } } Ví d 2
public interface MyInterface{
public voidadd(int x, int y);
} //Ho c
interface Interface_Const{
public static finaldouble price = 100.0;
public static finalint counter = 5; }
+ S d ng Interface trên
packageJavaContent;
public classUse_MyInterface implementsMyInterface,Interface_Const { public voidadd(int x, int y)
{System.out.println("Tong cua 2 so "+x+" + " + y+" la:"+ (x+y));}
public voidvolume(int x, int y, int z)
{ System.out.println("Tich cua 3 so "+x+" * " + y+"*"+z+" la:"+ (x*y*z)); }
public static voidmain(String args[])
{Use_MyInterface uu=newUse_MyInterface(); uu.add(4,8);
uu.volume(20,15,9);
System.out.println("Gia tri hang so price="+price); System.out.println("Gia tri hang so counter="+counter); }
}
Chú ý:
+ N u m t l p tri n khai nhi u giao di n thì các giao di n này c li t kê cách nhau b i d u ph y ‘,’
+ L p tri n khai giao di n ph i th c thi t t c các ph ng th c c khai báo trong giao di n, n u nh l p ó không tri n khai, ho c tri n khai không h t thì nó ph i c khai báo là abstract
+ Do giao di n c ng là m t l p tr u t ng do v y ta không th t o th hi n c a giao di n + M t l p có th tri n khai nhi u giao di n, do v y ta có l i d ng u này th c hi n hành vi k th a b i, v n không c java h tr
+ M t giao di n có th m r ng m t giao di n khác, b ng hình th c k th a
II. L p trong
Có th t m t nh ngh a l p này vào bên trong m t l p khác. u này c g i là l p trong. L p trong là m t tính n ng có giá tr vì nó cho phép b n g p nhóm các l p v m t logic thu c v nhau và ki m soát tính th y c c a các l p này bên trong l p khác. Tuy nhiên b n ph i hi u r ng l p trong không ph i là là h p thành
Ví d :
public class Stack {
privateVector items;
.. .//code for Stack's methods and constructors not shown...
public Enumeration enumerator() {
return newStackEnum();
}
class StackEnum implements Enumeration { int currentItem = items.size() - 1;
return (currentItem >= 0); }
public Object nextElement() {
if (!hasMoreElements())
thrownewNoSuchElementException(); else
return items.elementAt(currentItem--); }
} }
L p trong r t h u hi u khi b n b n mu n t o ra các l p u h p ( c bàn k khi nói v thi t k giao di n ng i dùng )
Bài 9. M NG, XÂU KÝ T , T P H P I. M ng
1. M ng 1 chi ua) Khai báo a) Khai báo
Cú pháp khai báo: