You are on page 1of 32

Lp trinh hng i tng trong Java

Chng : LP TRINH HNG I TNG TRONG JAVA


Java la mt ngn ng lp trinh hng i tng. Nu ban cha bao gi dung mt ngn
ng lp trinh hng i tng trc y, ban cn phai hiu cac khai nim sau : lp trinh hng
i tng (Object Oriented Programming) la gi ? i tng (Object), lp (class) la gi, mi quan
h gia i tng va lp, gi thng ip (Messages) n cac i tng la gi ?

I. KHAI NIM LP TRINH HNG I TNG

1. Lp trinh hng i tng (Object Oriented Programming)


Mi mt chng trinh may tinh u gm co 2 phn : phn ma lnh va phn d liu. Mt
s chng trinh t trong tm phn ma lnh, s khac t trong tm phn d liu. T o dn
n 2 m hinh quyt inh nn cu truc cua chng trinh : mt tra li cho cu hoi iu gi ang
xay ra, va mt cho Cai gi ang chiu tac ng. M hinh 1 goi la m hinh hng x ly, no m
ta nh la mt chng trinh bao gm mt chui cac bc thc hin (ma lnh). Nhng khi chng
trinh cang ngay cang ln va phc tap thi kho khn s dung m hinh th nht.
Vi vy m hinh th 2 c a ra, o la m hinh hng i tng. Chng trinh cua ban
se xy dng da vao d liu va phn giao din c inh nghia cho phn d liu o. M hinh
nay c m ta nh la d liu iu khin truy xut i vi ma lnh.
Ngn ng lp trinh hng i tng co cac kha nng sau :
- M phong th gii thc mt cach t nhin bi cac i tng va mi quan h gia chung, thun
tin cho vic thit k h thng phc tap
- Tha k ma co sn mt cach d dang, giup tit kim cng sc va nng cao nng sut cua ngi
lp trinh, d bao tri, d nng cp, m rng

2. Tru tng hoa (Abstraction)


Con ngi a n gian hoa cac vn phc tap thng qua s tru tng hoa. Vi du,
ngi s dung may tinh khng nhin may tinh mt cach phc tap. Nh s tru tng hoa ma
ngi ta co th s dung may tinh ma khng quan tm n cu truc chi tit bn trong may tinh.
Ho chi s dung chung nh la mt thc th
Cach tt nht nm vng ky thut tru tng la dung h thng phn cp. iu nay cho
phep ban phn lp cac thanh phn co y nghia cua ca h thng phc tap, chia nho chung thanh
nhng phn n gian co th quan ly c. Nhin bn ngoai may tinh la mt i tng, nu nhin
su hn mt cp, may tinh bao gm mt s b phn : hp iu khin, man hinh, ban phim,
chut..., cac b phn nay lai bao gm cac b phn nho hn, vi du nh hp iu khin co bang
mach chinh cha CPU, cac mach giao tip gn trn bang mach chinh, ia cng, ia mm
Nh s tru tng hoa ma ban khng quan tm n chi tit tng bang mach, ma chi quan tm
mi quan h, giao tip gia cac b phn. Mt mach giao tip du co chc nng ly ky th nao i
na, ban co th s dung khng my kho khn nu c n va vn vao khe cm trn bang mach
chinh.
S phn cp tru tng mt h thng phc tap co th ap dung cho cac chng trinh may
tinh. Phn d liu t mt chng trinh hng x ly kinh in co th tru tng hoa thanh cac i
tng thanh phn. Day cac x ly tr thanh cac thng ip gia cac i tng. Vi th cac i
tng cn co hoat ng c trng ring. Ban co th coi cac i tng nay nh nhng thc th
c lp tip nhn cac yu cu t bn ngoai. y la phn ct loi cua lp trinh hng i tng.

II. C CH TRIN KHAI M HINH HNG I TNG


Tt ca cac ngn ng lp trinh hng i tng u co cac c ch cho phep ban trin khai
cac m hinh hng i tng. o la tinh ong goi, k tha, va tinh a hinh.

1
Lp trinh hng i tng trong Java

1. Tinh ong goi (Encapsulation)


y la c ch dung mt vo boc kt hp phn d liu va cac thao tac trn d liu o (phn
ma lnh) thanh mt th thng nht, tao nn s an toan, tranh vic s dung khng ung thit k,
bao v cho ma lnh va d liu chng vic truy xut t nhng oan ma lnh bn ngoai.
Trong Java tinh ong goi th hin qua khai nim lp (Class). Lp la hat nhn cua Java,
tao nn tang cho lp trinh hng i tng trong Java. No inh nghia d liu va cac hanh vi cua
no (d liu va ma lnh), goi la cac thanh vin cua lp, dung chung cho cac i tng cung loai.
T s phn tich h thng, ngi ta tru tng nn cac lp. Sau o cac i tng c tao ra theo
khun mu cua lp. Mi i tng thuc mt lp co d liu va hanh vi inh nghia cho lp o,
ging nh la sinh ra t mt khun uc cua lp o. Vi vy ma lp la khun mu cua i tng,
i tng la th hin cua mt lp. Lp la cu truc logic, con i tng la cu truc vt ly. D liu
inh nghia trong lp goi la bin, ma lnh goi la phng thc. Phng thc inh nghia cho vic
s dung d liu nh th nao. iu nay co nghia la hoat ng cua lp c inh nghia thng qua
phng thc.
Cac c trng cua lp gm co hai phn chinh : thuc tinh (Attribute) va hanh vi
(Behavior). Gia s ban phai tao ra giao din vi ngi dung va cn co nhng nut nhn (Button).
Th thi trc ht ban xy dng lp Button vi cac thuc tinh nh nhan ghi trn nut, chiu rng,
chiu cao, mau cua nut, ng thi quy inh hanh vi cua nut nhn, nghia la nut nhn cn phan ng
nh th nao khi c chon, phat yu cu gi, co i mau hay nhp nhay chi khng. Vi lp
Button nh vy, ban co th tao ra nhanh chong nhng nut nhn cu th phuc vu cho cac muc ich
khac nhau
Goi la ky thut cua Java, dung phn hoach khng gian tn lp, giao din thanh nhng
vung d quan ly hn, th hin tinh ong goi cua Java.

2. Tinh k tha (Inheritance)


Tinh k tha la kha nng xy dng cac lp mi t cac lp a co. Tinh ong goi cung tac
ng n tinh k tha. Khi lp ong goi mt s d liu va phng thc, lp mi se k tha moi
cu truc d liu va cac phng thc cua lp ma no k tha. Ngoai ra no co th b sung cac d
liu va cac phng thc cua ring minh.
No rt quan trong vi no ng dung cho khai nim cy phn cp (m hinh TopDown).
Khng s dung cy phn lp, mi lp phai inh nghia tt ca cac d liu va phng thc cua
minh mt cach ro rang. Nu s dung s k tha, mi lp chi cn inh nghia thm nhng c
trng cua minh.
Vi du : Xe co th xem nh mt lp va cac xe Pergout, BWM, Dream la cac i tng cua lp
xe. Cac xe u co th lai i, dng lai... T lp xe trn, ta co th xy dng cac lp xe ap, xe
t. Xe t co thm may va co th t khi ng

3. Tinh a hinh (Polymorphism)


Khi mt lp c k tha t cac lp t tin thi no co th thay i cach thc lam vic cua
lp t tin trong mt s phng thc nao o (nhng tn, kiu tra v, danh sach tham i cua
phng thc thi vn gi nguyn). iu nay goi la vit chng. Nh vy vi mt tn phng thc,
chng trinh co th co cac hanh ng khac nhau tuy thuc vao lp cua i tng goi phng
thc. o la tinh a hinh
Vi du : vi mt phng thc chay, xe t, xe may co th tng ga, con xe ap thi phai ap
Tinh a hinh con th hin vic mt giao din co th s dung cho cac hoat ng cua mt
lp tng quat, hay con goi la mt giao din, nhiu phng thc. Co nghia la co th thit k mt
giao din tng quat cho mt nhom cac hanh vi lin quan. iu nay giam thiu s phc tap bng
cach cho phep mt giao din co th s dung cho cac hoat ng cua mt lp tng quat. Trinh bin
dich se xac inh hoat ng cu th nao se c thi hanh tuy theo iu kin. Ban chi cn nh cac
giao din cua lp tng quat va s dung no.

2
Lp trinh hng i tng trong Java

S kt hp ung n gia : a hinh, ong goi va k tha tao nn mt mi trng lp trinh


co kha nng phat trin tt hn rt nhiu so vi mi trng khng h tr hng i tng. Mt
cy phn cp lp thit k tt la iu cn ban cho vic s dung lai nhng oan ma lnh ma ban a
tn cng sc nhiu cho vic phat trin va kim tra. Tinh ong goi cho phep ban s dung cac i
tng va ra lnh thi hanh ti chung ma khng pha v cu truc cac oan ma lnh a bao v bi
giao din cua cac lp. S a hinh cho phep ban tao ra nhng oan ma lnh gon gang, d oc, d
hiu va co tinh n inh.
Java la ngn ng lp trinh hng i tng nn co y u cac tinh nng trn, th vin lp
Java c cung cp kha y u cho ngi lp trinh bt u mt d an mi

3
i tng va lp, mang

Chng : I TNG VA LP, MANG


I. XY DNG LP
Khi inh nghia mt lp, ban chi ra thuc tinh ma no cha c th hin bng bin
(Member Variable) va hanh vi c th hin bi ham (Method)
Cac bin inh nghia bn trong mt lp goi la cac bin thanh vin (Member Variables).
Ma lnh cha trong cac phng thc (Method). Cac phng thc va bin inh nghia trong lp
goi chung la thanh phn cua lp. Trong hu ht cac lp, cac bin th hin c truy cp bi cac
phng thc inh nghia trong lp o. Vi vy, chinh cac phng thc quyt inh d liu cua lp
co th dung nh th nao. Lp inh nghia mt kiu d liu mi, dung tao cac i tng thuc
kiu o.
Dang y u cua mt inh nghia lp nh sau :

[public] Lp c truy xut chung cho cac Package


khac, mc inh chi co cac oan ma trong
cung mt goi mi co quyn truy xut no
[abstract] Lp tru tng, khng th khi tao
[final] Lp hng khng co lp con, khng k tha
class ClassName Tn lp
[extends SuperClass] K tha lp cha SuperClass
[implements Interfaces] Giao din c cai t bi Class
{ //Member Variables Declarations Khai bao cac bin
// Methods Declarations Khai bao cac phng thc
}

Vi du : Tao mt lp Box n gian vi ba bin : width, height, depth


/* inh nghia lp
*/
class Box {
double width;
double height;
double depth;
}

II. TAO I TNG

1. Khai bao i tng


co c cac i tng cua mt lp phai qua hai giai oan :
ClassName ObjectName;
Vi du : Box myBox
Khai bao bin myBox co kiu lp Box. Khai bao nay thc ra khng cp phat ky c u
cha i tng thuc lp Box, ma chi tao ra quy chiu tro n i tng Box. Sau cu lnh nay,
quy chiu myBox xut hin trn ky c cha gia tri null chi ra rng no cha tro n mt i tng
thc t nao
Khac vi cu lnh khai bao bin kiu s cp la danh ch trn ky c u cha mt tri thuc
kiu o :
Vi du : int i;
Sau cu lnh nay, bin nguyn i hinh thanh.
Sau o, thc s tao ra mt i tng va gan ia chi cua i tng cho bin nay,

4
i tng va lp, mang

dung toan t new


ObjectName = new ClassName();
Vi du : myBox = new Box();
Co th kt hp ca hai bc trn vao mt cu lnh :
ClassName ObjectName = new ClassName();
Vi du : Box myBox = new Box();
Box myBox2 = myBox;
myBox2 tham chiu n cung i tng ma myBox tham chiu

myBox width
Box Object
height
m
depth
ybox
myBox2

2. Cach truy xut thanh m


phn cua lp
ybox
Bin khai bao trong inh nghia lp gm co hai loai :
- Bin i tng (Instance Variable hay Object Variable) : chi thuc tinh i tng, khi truy xut
phai khi tao i tng
+ Cach khai bao bin i tng :
Type InstanceVar;
+ Cach truy cp bin i tng :
ObjectName.InstanceVar
- Bin lp (Class Variable) : v ban cht la bin toan cuc, la bin tinh c tao lp mt ln cung
vi lp, dung chung cho moi i tng thuc lp, khi truy xut khng cn khi tao i tng,
trao i thng tin cua cac i tng cung lp
+ Cach khai bao bin lp :
static Type ClassVar;
+ Cach truy cp bin lp :
ClassName.ClassVar

Ham khai bao trong inh nghia lp gm co hai loai :


- Ham i tng (Object Method) : cach truy xut ham i tng nh bin i tng
ObjectName.ObjectMethod(Parameter-List)
- Ham lp (Class Method) : thng thng mt thanh phn cua lp chi truy xut trong s lin kt
vi mt i tng thuc lp cua no. Tuy nhin, co th tao ra mt thanh phn ma co th dung mt
c lp mt minh, khng cn tham chiu n mt i tng cu th, co th c truy xut trc
khi bt ky i tng nao cua lp o c tao ra, bng cach t trc khai bao cua no t khoa
static. Cach truy xut ham lp :
ClassName.ClassMethod(Parameter-List)
Cac ham toan hoc cua lp Math trong Package Java.Lang la ham lp nn khi goi khng cn phai
khi tao i tng
Vi du : double a = Math.sqrt(453.28);
Vi du 1: class BaiTho {
static int i; // Bin lp
String s; // Bin i tng
BaiTho(String ss) { // Ham khi tao
s = ss;
i++;

5
i tng va lp, mang

}
void content( ) {
System.out.println(s);
}
}
class UngDung {
public static void main(String args[]){
BaiTho p1 = new BaiTho(Chi co thuyen moi hieu);
BaiTho p2 = new BaiTho(Bien menh mong nhuong nao);
p1.content();
p2.content();
System.out.println(So cau tho la : +BaiTho.i);
}
}
Khi tao i tng p1, p2 bi toan t new, ham dng BaiTho() c goi, va i tng ln 1
Vi du 2:
class BaiTho2 {
static int i;
String s;
BaiTho2(String ss) { // Ham khi tao
s = ss; i++;
}
static int number() { // Ham lp
return i;
}
String content() { // Ham i tng
return s;
}
}
class UngDung2 {
public static void main (String args[]) {
System.out.println(Bai tho co +BaiTho2.number()+ cau);
BaiTho2.p1 = new BaiTho2(Chi co thuyen moi hieu);
BaiTho2.p2 = new BaiTho2(Bien menh mong nhuong nao);
System.out.println(Bai tho co +BaiTho2.number()+ cau);
System.out.println(Cau tho\n+p1.content().toUpperCase()+\nco +
p1.content().length() + ky tu);
System.out.println(Tu \tinh yeu\ bat dau sau ky tu thu+
p2.content().indexOf(tinh yeu)+ trong cau\n+
p2.content().toUpperCase());
}
}
Goi ham lp BaiTho2.number() luc cha goi ham dng BaiTho2 khi tao i tng se cho tri
0
p1.content() tra v mt i tng String

III. GII THIU V PHNG THC

1. Khai bao phng thc (ham)


Dang tng quat cua mt phng thc nh sau :

6
i tng va lp, mang

[acess] iu khin truy xut


[static] ham lp
[abstract] ham tru tng
[final] ham hng
[Type] MethodName(Parameter-List) throws exceptions {
// Body of method }

- Type : Kiu d liu do ham tra v, co th la kiu bt ky, k ca cac kiu lp do ban tao ra. Nu
ham khng tra v gia tri nao, kiu tra v cua no phai la void.
- Cac ham co kiu tra v khng phai la void se tra v mt gia tri cho chng trinh goi no dung
dang cu lnh return nh sau :
return biu thc;
Gia tri cua biu thc c tinh va tra v cho ham
- Tt ca thng tin ban mun truyn c gi thng qua tham s nm trong hai du ( ) ngay sau
tn ham. Nu khng co tham s vn phai co ( )
Parameter-List : Danh sach tham i phn cach bi cac du phy, mi tham i phai c khai
bao kiu, co th la kiu bt ky, co dang : Type Parameter1, Type Parameter2 ...

2. Pham vi truy xut thanh phn cua lp


Cac iu khin truy xut cua Java la public, private va protected. protected chi ap dung
khi co lin quan n k tha se xet n sau
Khi b sung tin t cho mt thanh phn cua lp (bin va ham) la :
- T khoa public : chi ra rng thanh phn nay co th c truy xut bi bt ky dong lnh nao du
trong hay ngoai lp ma no khai bao
- private : chi co th c truy xut trong lp cua no, moi oan ma nm ngoai lp, k ca nhng
lp con u khng co quyn truy xut
- Khi khng co iu khin truy xut nao c dung, mc nhin la public nhng chi trong goi cua
no, khng th truy xut t bn ngoai goi cua no

3. Phng thc main()


Khi chay ng dung c lp, ban chi tn Class mun chay, Java tim goi ham main() trc
tin trong Class o, phng thc main se iu khin chay cac phng thc khac.
Dang tng quat cua phng thc main()
public static void main(String args[]) {
// Body of Method
}
- Mt chng trinh chi cn mt lp co phng thc main() goi la lp ng dung c lp Primary
Class.
- T khoa static cho phep ham main() c goi khi khng cn khi tao i tng. Vi main()
c trinh thng dich cua Java goi trc khi bt ky lp nao c khi tao
- T khoa void cho bit ham main() khng tra v gia tri
- T khoa public chi ra rng ham nay c goi bi dong lnh bn ngoai lp khi chng trinh
khi ng.
- Tham i String args[ ] khai bao tham s tn args thuc lp String, cha chui ky t. Tham i
nay gi cac tham i dong lnh dung khi thi hanh chng trinh.
Vi du 1 :
class ViDu {
public static void main (String args[]) {
for (int i=0; i < args.length; i++) {

7
i tng va lp, mang

System.out.println(Tham doi thu +i+: +args[i]);


}
}
}
Khi chay chng trinh :
C:\>java ViDu Thu tham doi dong lenh
Tham doi thu 0 : Thu
Tham doi thu 1 : tham ....
C:>java ViDu Thu tham doi dong lenh
Tham doi thu 0 : Thu
Tham doi thu 1 : tham doi
Tham doi thu 2 : dong lenh
Vi du 2 :
class ViDu2;
public static void main(String args[]) {
int sum = 0;
float avg = 0;
for (int i=0; i<args.length;i++) {
sum += Integer.parseInt(args[i]);
}
System.out.println(Tong =+sum);
System.out.println(Trung binh =+ (float) sum/args.length);
}
}
Khi chay chng trinh :
C:\>java ViDu2 1 2 3
Tong = 6
Trung binh = 2

4. Ham khi tao (Constructor)


Co nhng thao tac cn thc hin mi khi i tng ln u tin c tao nh khi tao gia
tri cho cac bin. Cac cng vic nay co th lam t ng bng cach dung ham khi tao.
Ham khi tao co cung tn vi lp ma no thuc v, chi c t ng goi bi toan t new
khi i tng thuc lp c tao. Ham khi tao khng co gia tri tra v, khi inh nghia ham co
th ghi void hay khng ghi.
Vi du : - kich thc hp c khi tao t ng khi i tng c tao.
class Box {
double width;
double height;
double depth;
double volume() {
return width * height * depth;
}
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
}
class BoxDemo {

8
i tng va lp, mang

public static void main (String args[ ]) {


Box myBox1 = new Box(10,20,15);
Box myBox2 = new Box(3,6,9);
double vol;
vol = myBox1.volume();
System.out.println(Th tich la : +vol);
vol = myBox2.volume();
System.out.println(Th tich la : +vol);
}
}
- Khi ban khng inh nghia tng minh ham khi tao cho mt lp, Java se tao ham khi tao mc
nhin cho lp o. Vi vy cac chng trinh trc o vn lam vic binh thng. Ham khi tao mc
nhin khng co danh sach tham i, t ng khi tao tt ca cac bin cua i tng v tri rng
theo cac quy c mc inh cua Java, tri 0 cho kiu s, ky t \0 cho kiu ky t char, tri false cho
kiu boolean, tri null cho cac i tng
- Ham khi tao cung co th c nap chng nh ham binh thng (se noi ro phn sau) nghia la
ta c phep inh nghia nhiu ham khi tao khac nhau danh sach tham i hay kiu tham i

5. Ham huy
Cac i tng cp phat ng bng toan t new, khi khng tn tai tham chiu nao n i
tng, i tng o xem nh khng con cn n na va b nh cho no co th c t ng giai
phong bi b thu gom rac (garbage collector). Trinh thu gom rac hoat ng trong mt tuyn oan
(Thread) c lp vi chng trinh cua ban. Ban khng phai bn tm gi i vi cng vic nay.
Sau nay ban se hiu ro tuyn oan la th nao
Tuy nhin, Java cung cho phep ta vit ham huy, co th cung cn thit cho nhng trng
hp nao o. Ham huy trong Java chi c goi bi trinh thu gom rac, do vy ban kho oan trc
vao luc nao ham huy se c goi
Dang ham huy nh sau :
protected void finalize() {
// Body of Method
}

6. T khoa this
Nu bin c inh nghia trong thn ham, o la bin cuc b chi tn tai khi ham c
goi. Nu bin cuc b nh vy c t tn trung vi bin i tng hoc bin lp, no se che
khut bin i tng hay bin lp trong thn ham :
Vi du :
class ViDu {
int test = 10; // Bin i tng
void printTest() {
int test = 20; // Bin cuc b
System.out.println(test = +test); // In bin cuc b
}
public static void main(String args[]) {
ViDu a = new ViDu();
a.printTest();
}
}
T khoa this co th dung bn trong bt c phng thc nao tham chiu n i tng
hin hanh, khi bin i tng trung tn vi bin cuc b.

9
i tng va lp, mang

Vi du : Thay dong lnh trn :


System.out.println(test = +this.test); // In bin cuc b, this chi i tng a

7. Nap chng ham (Overloaded Methods)


Trong cung mt lp, Java cho phep ban inh nghia nhiu ham trung tn vi iu kin cac
ham nh vy phai co danh sach tham i khac nhau, nghia la khac nhau v s tham i hoc kiu
cua cac tham i. Kha nng nh vy goi la s nap chng ham. Java chi phn bit ham nay vi
ham khac da vao s tham i va kiu cua cac tham i, bt chp tn ham va kiu cua kt qua tra
v.
Vi du :
// MyRect.java
import java.awt.Point;
class MyRect {
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
MyRect buildRect(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
return this;
}
MyRect buildRect(Point topLeft, Point bottomRight) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
return this;
}
MyRect buildRect(Point topLeft, int w, int h) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = x1+w;
y2 = y1 + h;
return this;
}
void display() {
System.out.print(Doi tuong MyRect : < + x1 + , +y1);
System.out.println(, +x2+, +y2+>);
}
}
Tht ra, trong goi awt co sn lp Rectangle chuyn dung biu din hinh ch nht. Lp
MyRect cua ta chi dung minh hoa cho khai nim nap chng ham. Trong lp MyRect co nhng
ham giup ban tao ra i tng MyRect vi nhng yu t cho trc khac nhau :
- Cho trc toa goc trn trai x1, y1 va toa goc di phai x2, y2
- Cho trc goc trn trai va goc di phai cua hinh ch nht di dang i tng Point
- Cho trc toa goc trn trai cua hinh ch nht dang i tng Point cung chiu rng, chiu
cao

10
i tng va lp, mang

Nh kha nng nap chng ham, ban chi cn nh mt tn ham cho cac ham khac nhau cung
chc nng
Chng trinh s dung lp MyRect xy dng trn :
import java.awt.Point;
class UngDung {
public static void main(String args[]) {
MyRect rect = new MyRect();
rect.buildRect(25,25,50,50);
rect.display();
rect.buildRect(new Point(10,10), new Point(20,20));
rect.display();
rect.buildRect(new Point(10,10), 50, 50);
rect.display();
}
}

8. Truyn tham i
Java dung ca hai cach truyn tham i : truyn bng gia tri va truyn bng tham chiu,
tuy vao cai gi c truyn
- Khi ta truyn mt kiu s cp cho phng thc, no se truyn bng gia tri. Vi vy nhng gi xay
ra vi tham i trong phng thc, khi ra khoi phng thc se ht tac dung
- Khi ta truyn mt i tng (kiu phc hp) cho phng thc, no se truyn bng tham chiu.
Vi vy, thay i i tng bn trong phng thc anh hng n i tng dung lam tham
i.
Vi du 1 :
class ViDu {
void tinhToan(int i, int j) {
i *= 2;
j /= 2;
}
}
class UngDung {
public static void main(String args) {
ViDu o = new ViDu();
int a = 15, b = 20;
System.out.println(a va b trc khi goi : +a+ +b);
o.tinhToan(a, b);
System.out.println(a va b sau khi goi : +a+ +b);
}
}
Kt qua cua chng trinh :
a va b trc khi goi : 15 20
a va b sau khi goi : 15 20
Vi du 2 :
class ViDu {
int a, b;
ViDu (int i, int j) {
a = i;
b = j;
}

11
i tng va lp, mang

void tinhToan(ViDu o) {
o.a *= 2;
0.b /= 2;
}
}
class UngDung {
public static void main(String args[]) {
ViDu o = new ViDu(15, 20);
System.out.println(o.a va o.b trc khi goi : +o.a+ +o.b);
o.tinhToan(o);
System.out.println(o.a va o.b sau khi goi : +o.a+ +o.b);
}
}
Kt qua chng trinh :
o.a va o.b trc khi goi : 15 20
o.a va o.b sau khi goi : 30 10

IV. LP K THA

1. Khai bao k tha


Ta co th s dung tinh k tha tao lp tng quat co nhng c tinh chung ai din cho
mt tp hp cac i tng co cung mi quan h. Sau o, lp nay co th c k tha bi mt
hay nhiu lp khac va nhng c tinh nay tr thanh nhng thanh nhng c tinh cua lp k tha
- Lp c k tha goi la lp cha (SuperClass : la lp cha trc tip)
- Lp k tha goi la lp con (SubClass)
Lp con k tha tt ca cac bin va ham inh nghia trong lp cha
class ClassName extends SuperClass
{ //Member Variables Declarations, Methods
}
- Mc du vy, lp con khng th truy xut cac thanh phn c khai bao private trong lp cha
- Mt bin tham chiu cua lp cha co th gan tham chiu n mt lp con bt ky dn xut t
lp cha. Khi mt tham chiu n mt lp con c gan cho bin tham chiu kiu lp cha, ta chi
co quyn truy xut nhng phn c inh nghia bi lp cha.

2. Vit chng ham hay che khut ham (Overriding Methods)


Trong phn cp lp, khi mt ham cua lp con co cung tn, va ging nhau v s lng va
kiu tham i cung nh kiu tra v vi mt ham lp cha, thi ham lp con c goi la vit
chng ham trong lp cha. Khi o ham cua lp con se che khut ham tha k t lp cha
Tuy nhin lp con khng c vit chng ham hng (co khai bao final) va ham lp trong
lp cha.
Vi du : Tt ca cac lp la hu du cua lp Object. Lp Object cha phng thc toString, ma tra
v mt i tng String cha tn lp cua i tng. Hu ht cac lp con vit chng phng thc
nay va in ra mt vai iu gi o co nghia cho lp o

3. T khoa super
i khi ban khng mun thc hin vit chng mt phng thc ma chi mun thm chc
nng vao phng thc. lam c iu nay, ban goi phng thc c vit chng dung t
khoa super. T khoa super dung khi lp con cn tham chiu lp cha trc tip cua no. Super co
hai dang cu phap :
- Dang 1 : Ham khi tao lp cha phai c goi trc ham khi tao cua lp con. Nu trong inh

12
i tng va lp, mang

nghia ham khi tao lp con khng co cu lnh goi ham khi tao lp cha, trinh bin dich Java se
t ng a vao cu lnh goi ham khi tao mc inh cua lp cha co dang : classname()
Ban co th t thm lnh goi ham khi tao lp cha co dang nh sau :
super(Parameter-List)
Parameter-List la danh sach cac tham i cn thit cho ham khi tao cua lp cha. super() phai
lun lun la phat biu u tin c thc hin trong ham khi tao cua lp con
Vi du :
class MyPoint {
int x, y;
MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
void display() {
System.out.print(x = +x+, y = +y+\n);
}
}
class MyPoint2 extends MyPoint {
int z;
String name;
MyPoint2(int x, int y, int z, String name) {
super(x,y); // Khi tao 2 bin x, y bng cach goi
this.z = z; // ham dng cua lp cha
this.name = name;
}
void display() { // Vit chng ham k tha t lp cha
System.out.print(x = +x+, y = +y+, z = +z+ +name
:+name+\n);
}
}
- Dang 2 : dung ham lp con truy xut ham k tha t lp cha :
super.Member
Member co th la phng thc hay bin cua i tng
Vi du : Vit lai ham display() trong class MyPoint2, co goi ham k tha t lp cha :
void display() {
super.display();
System.out.print(, z = +z+ +name :+name+\n);
}

V. LP, PHNG THC TRU TNG


Trong trng hp chung ta mun inh nghia mt lp cha theo mt cu truc tru tng
cho trc ma khng cn hin thc y u cac phng thc. Tc la ta mun tao mt lp cha co
dang chung cho tt ca cac lp con va cac lp con hin thc chi tit. Khi o, ban mun chc
chn lp con co chng lp phng thc. Nhng phng thc phai c chng lp trong lp con
goi la phng thc tru tng, c khai bao abstract va khng co phn thn phng thc
abstract [Type] MethodName(Parameter-List) ;
Bt ky lp nao cha mt hay nhiu phng thc tru tng cung phai khai bao tru
tng, s dung t khoa abstract trc t khoa class. Khng th khi tao i tng kiu lp tru
tng, vi lp tru tng khng c inh nghia y u. Do o, ban cung khng th khai bao
ham khi tao. Bt ky lp con nao cung phai hoc la vit chng tt ca cac phng thc tru tng

13
i tng va lp, mang

hoc chinh no lai c khai bao abstract


Vi du : Trong cac ng dung, ban co th ve ng tron, hinh ch nht, oan thng, ng cong
Mi mt i tng hoa nay u cha cac thuc tinh (vi tri, net vin) va hanh vi (di chuyn,
thay kich thc, ve). Ban co th khai bao chung k tha lp Graphic. Tuy nhin ve mt ng
tron la hoan toan khac vi ve mt hinh ch nht, nn lp Graphic c khai bao la lp tru
tng, cha cac phng thc a c hin thc nh moveTo, va phng thc tru tng nh
draw
abstract class GraphicObject {
int x, y;
...
void moveTo(int newX, int newY) {
...
}
abstract void draw();
}
Mi mt lp con khng tru tng cua lp Graphic nh Circle, Rectangle se phai cai t
y u cho phng thc draw
class Circle extends GraphicObject {
void draw() {
...
}
}
class Rectangle extends GraphicObject {
void draw() {
...
}
}

VI. LP HNG (KHNG K THA), HAM HNG (KHNG VIT CHNG)

1. S dung t khoa final cm s chng lp


Mc du chng lp phng thc la mt trong nhng c im manh nht cua Java, tuy
nhin trong vai trng hp ban mun cm iu nay. cm mt phng thc lp con vit chng
phng thc lp cha, ban a t khoa final vao u khai bao
Vi du : class Box {
double width;
double height;
double depth;

final double volume() {
return width * height * depth;
}
...
}

2. S dung t khoa final cm s k tha


Mun khai bao mt lp ma khng co lp con k tha, ban s dung t khoa final. Vi mt
lp final, thi tt ca cac phng thc cua no se la final.
Ta khng th khai bao mt lp va abstract va final vi mt lp tru tng la mt lp
cha hoan chinh va phai co lp con hin thc y u

14
i tng va lp, mang

Vi du : final class Box { . . .


}

VII. LP LNG NHAU


Co th inh nghia mt lp bn trong mt lp khac. Lp nh vy goi la lp lng (Nested
Class) va c cai t nh sau :
class EnclosingClass{ // Lp bao bn ngoai
...
static class StaticNestedClass { // Lp lng tinh
...
}
class InnerClass { // Lp lng phi tinh hay lp ni b
...
}
}
Lp lng chi c bit bn trong tm vc cua lp bao bn ngoai. B dich Java se bao li
nu mt oan ma bt ky bn ngoai lp bao c dung trc tip lp lng.
Mt lp lng co quyn truy cp n cac thanh vin cua lp bao bn ngoai, thm chi nu
chung c khai bao private. Tuy nhin, lp bao khng th truy xut cac thanh phn cua lp
lng.
Co hai kiu lp lng : tinh va phi tinh.
Lp lng tinh (static nested class) c b sung t khoa static. No khng th tham chiu
trc tip n bin hay phng thc i tng c inh nghia trong lp bao, ma chi dung chung
thng qua i tng. Vi gii han nay nn lp lng tinh it c dung. Hu ht cac lp lng la lp
ni b
Lp lng phi tinh (nonstatic nested class) khng b sung t khoa static, con c goi la
lp ni b (inner class). No co th truy cp trc tip n cac bin va phng thc i tng.
class Outer {
int outer_x = 100;
void test() {
Inner inner = new Inner();
inner.display_x();
}
class Inner { // co th truy xut trc tip bin i tng cua lp Outer
int inner_y = 10;
void display_x() {
System.out.println(display : outer_x = + outer_x);
}
}
void display_y() { // khng th truy xut bin i tng cua lp Inner
System.out.println(display : inner_y = + inner_y); // Error
}
}
class InnerClassDemo {
public static void main(String args[]) {
Outer outer = new Outer();
outer.test();
}
}

15
i tng va lp, mang

VIII. CHUYN I KIU

1. Chuyn i gia cac kiu phc hp


Java chi cho phep chuyn i i tng thuc lp con chau thanh i tng cua lp cha
ng (Ancestors), va khng cho chuyn ngc lai
Gia s ban co i tng thuc lp con Child va cn chuyn i thanh i tng thuc lp
cha ng Parent. Java cho phep dung i tng Child mt cach t nhin bt c ch nao danh
cho i tng Parent, ta khng cn lam ng tac chuyn i nao ca. i tng Child co y u
thuc tinh va hanh vi cua i tng Parent nn co th vao vai i tng Parent. Nu mun,
ban cung co th chuyn i i tng thuc lp con chau thanh i tng thuc lp cha ng mt
cach tng minh, nhng khng cn thit :
Child c = new Child();
Parent p = (Parent) c;

2. Chuyn i kiu s cp thanh kiu phc hp


Trong goi java.lang co sn nhng lp tng ng vi cac kiu s cp, co th dung thay
cho kiu s cp : lp Integer thay cho kiu int, lp Boolean cho kiu boolean, lp Float cho kiu
float, lp Double cho kiu double Lp Number la lp cha cua moi lp boc kiu
Chng han, mun cho kiu int co th xut hin nh mt i tng thuc lp Integer :
Integer intObj = new Integer(25);
Lp Integer c trang bi nhng phng thc giup ban nhiu vic ma kiu int khng th am
ng.
- Ly gia tri nguyn ma i tng intObj nm gi :
int i = intObj.intValue();

IX. MANG (ARRAY)


Mang la mt cu truc lu gi cac thanh phn co cung kiu. Chiu dai mt mang c
thit lp va c inh khi mang c tao luc chay chng trinh. Mi thanh phn cua mang c
truy xut bi chi s cua no trong mang
Nu ban mun lu gi cac thanh phn khac kiu nhau hay kich thc mang co th thay
i ng, dung mt Vector thay cho mang

1. Tao va s dung mang


Khai bao mt bin tham chiu n mang
ArrayType[] ArrayName
Khai bao mt bin co kiu ArrayType dung tham chiu n mang, nhng khng co mang nao
tht s tn tai
ArrayType : la kiu d liu cua cac thanh phn cha trong mang va du [] chi inh o la mt
mang
Kiu d liu thanh phn co th la bt ky kiu c s, tham chiu
int[] anArrayOfInts; // Khai bao mt mang s nguyn
float[] anArrayOfFloats;
boolean[] anArrayOfBooleans;
Object[] anArrayOfObjects;
String[] anArrayOfStrings;
Tao mt mang
Ban dung toan t new tao mt mang, nghia la cp phat b nh cho cac thanh phn va
gan mang n bin a khai bao
ArrayName = new ArrayType[ArraySize]

16
i tng va lp, mang

ArraySize : la s thanh phn cua mang


Vi du : int[] M; // khai bao bin mang kiu s nguyn
M = new int[10]; // tao mt mang s nguyn
Ban co th kt hp s khai bao bin mang va tao mang nh sau :
ArrayType[] ArrayName = new ArrayType[ArraySize]
Co th vit nh sau :
ArrayType ArrayName[] = new ArrayType[ArraySize]
Vi du : int[] M = new int[10];
int M[] = new int[10];
Truy xut thanh phn cua mang
ArrayVar[index]
index : chi vi tri cua thanh phn trong mang cn truy xut, co th la gia tri, bin hay biu thc, va
co gia tri t 0 n ArraySize-1
Vi du : M[1] = 20;
Ly kich thc mang
ArrayName.length
Khi tao gia tri u cua mang
Mang co th khi tao khi khai bao. Mang khi tao la danh sach cac biu thc cach nhau
bi du phy va bao quanh bi du ngoc moc. Mang se c khi tao t ng lu s phn t
ma ban xac inh luc khi tao, khng cn s dung new. Chiu dai cua mang la s gia tri gia { va
}
Vi du : boolean[] answers = { true, false, true, true, false };
int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
Vi du 1: Tao va s dung mang co thanh phn kiu c s
public class ArrayDemo {
public static void main(String[] args) {
int[] anArray;
anArray = new int[10];
for (int i = 0; i < anArray.length; i++) {
anArray[i] = i;
System.out.print(anArray[i] + " ");
}
System.out.println();
}
}
Vi du 2 : Tao va s dung mang co thanh phn kiu tham lp String
public class ArrayOfStringsDemo {
public static void main(String[] args) {
String[] anArray = { "String One", "String Two", "String Three" };
for (int i = 0; i < anArray.length; i++) {
System.out.println(anArray[i].toLowerCase());
}
}
}

2. Mang a chiu (Arrays of Arrays)


Mang co th cha cac thanh phn la mang. khai bao mt bin mang a chiu cn xac
inh mi chiu cua mang bng cach s dung cac cp du ngoc vung.
Vi du : int M[][] = new int[4][5];
int[][] M = new int[4][5];

17
i tng va lp, mang

M la mt mang 4x5 thanh phn la cac s nguyn.


Khi cp phat b nh cho mang a chiu, ban co th chi inh chiu dai cua mang chinh, va
khng chi inh chiu dai cua mang con cho n khi tao chung
Vi du : int M[][] = new int[3][];
M[0] = new int[3];
M[1] = new int[4];
M[2] = new int[2];
Vi du 1 :
public class ArrayOfArraysDemo {
public static void main(String[] args) {
String[][] cartoons = {
{ "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" },
{ "Rubbles", "Barney", "Betty", "Bam Bam" },
{ "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" },
{ "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred",
"Daphne" }
};
for (int i = 0; i < cartoons.length; i++) {
System.out.print(cartoons[i][0] + ": ");
for (int j = 1; j < cartoons[i].length; j++) {
System.out.print(cartoons[i][j] + " ");
}
System.out.println();
}
}
}
Chu y la tt ca mang con co chiu dai khac nhau. Tn cua mang con la cartoons[0],
cartoons[1]...
Vi du 2 :
public class ArrayOfArraysDemo2 {
public static void main(String[] args) {
int[][] aMatrix = new int[4][];
for (int i = 0; i < aMatrix.length; i++) {
aMatrix[i] = new int[5];
for (int j = 0; j < aMatrix[i].length; j++) {
aMatrix[i][j] = i + j;
}
}
for (int i = 0; i < aMatrix.length; i++) {
for (int j = 0; j < aMatrix[i].length; j++) {
System.out.print(aMatrix[i][j] + " ");
}
System.out.println();
}
}
}

3. Sao chep mang (Copying Arrays)


S dung phng thc arraycopy cua System sao chep d liu t mt mang n mt mang
khac. Phng thc arraycopy yu cu 5 tham i :

18
i tng va lp, mang

public static void arraycopy(ArrayType[] source,


int srcIndex,
ArrayType[] dest,
int destIndex,
int length)

Hai tham i Object chi inh mang ngun va mang ich. Ba tham i int chi vi tri bt
u trong mi mang ngun va ich, va s thanh phn sao chep. Biu nay minh hoa vic
sao chep :

Vi du :
public class ArrayCopyDemo {
public static void main(String[] args) {
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
'i', 'n', 'a', 't', 'e', 'd' };
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
System.out.println(new String(copyTo));
}
}

Biu sau m ta cho vi du trn :

Chu y rng mang ich phai c cp phat va phai u ln cha d liu c sao chep

19
Goi va giao din

Chng : GOI VA GIAO DIN


Goi (Package) va giao din (Interface) la hai thanh phn c ban trong mt chng trinh
Java.

I. GOI
Goi la ky thut phn hoach khng gian tn lp, giao din thanh nhng vung d quan ly
hn. Vi du khi ban tao mt lp trong mt goi nao o, ban khng cn phai kim tra xem no co bi
trung tn vi mt lp nao o trong goi khac khng.
Goi bao gm hai ky thut t tn va ky thut iu khin truy xut. Ban co th cp hay
khng cp quyn truy xut cac lp bn trong goi i vi cac oan ma nm ngoai goi. Ban cung
co th xac inh thanh phn nao cua lp ma chi co cac thanh phn trong cung mt lp mi co
quyn truy xut.

1. inh nghia goi


Tao mt goi bng cach t t khoa package ngay phat biu u tin cua tp tin ngun
Java. Bt ky lp nao khai bao trong tp tin nay u thuc goi nay. Nu ban bo qua phat biu
Package, cac lp se t vao package mc inh
package PackageName;
Java s dung h thng th muc lu tr cac goi. Cac lp se cha trong th muc trung
tn PackageName
Co th tao cac package phn cp, dung du chm phn bit mt package vi package
cha cua no. S phn cp package phai c anh xa vao h thng tp tin. Java xem gc cua cy
phn cp goi c inh nghia bi bin mi trng CLASSPATH.
package PackageName1[.PackageName2[.PackageName3]];
Vi du : package java.awt.image;
c lu tr trong Java\awt\image vi h iu hanh Windows.

2. iu khin truy xut


Thng qua phep ong goi (lp, goi), ta co th iu khin phn nao cua chng trinh co
th truy xut cac thanh phn cua lp
Cac iu khin truy xut cua Java la public, private va protected. protected chi ap dung
khi co lin quan n k tha
Khi b sung tin t cho mt thanh phn cua lp (bin va ham) la :
- T khoa public : chi ra rng thanh phn nay co th c truy xut bi bt ky dong lnh nao du
trong hay ngoai lp, goi (Package) ma no khai bao
- private : chi co th c truy xut trong lp cua no, moi oan ma nm ngoai lp, k ca nhng
lp con u khng co quyn truy xut
- Khi khng co iu khin truy xut nao c dung, cac lp con cung nh cac lp trong cung goi
u co th truy xut no, khng th truy xut t bn ngoai goi cua no
- protected : lin quan n s k tha, nu ban chi cho cac lp con trc tip mi co quyn truy
xut cac thanh phn cua lp, ban khai bao chung la protected
Vi lp chi co hai mc truy xut : mc inh va public. Khi mt lp khai bao public, cac oan
ma khac co th truy xut c no. Nu lp la truy xut mc inh, chi co cac oan ma trong cung
mt goi mi co quyn truy xut no

iu khin truy xut Trong lp Trong lp Trong Package Toan b


thanh phn cua lp con (Goi)
private X
protected X X* X

20
Goi va giao din

public X X X X
Khng co X X X

Vi du :
package Greek;
public class Alpha {
protected int i;
protected void protectedMethod() {
System.out.println(Protected Metho);
}
}
class Gamma {
void accessMethod() {
Alpha a = new Alpha();
a.i = 10; // Hp l
a.protectedMethod(); // Hp l
}
}
package Latin;
import Greek.*;
class Delta extends Alpha {
void accessMethod (Alpha a, Delta d) {
a.i = 10; // Khng hp l
d.i = 10; // Hp l
a.protectedMethod(); // Khng hp l
d.protectedMethod(); // Hp l
}
}

3. S dung goi
Java a ra phat biu import nhng lp nao o hay toan b goi co th thy c, nghia
la ban co th s dung lp trc tip qua tn cua no, khng cn dung du chm truy xut
Trong tp tin ngun Java, phat biu import t ngay sau phat biu package (nu tn tai)
va trc bt c inh nghia lp nao
import PackageName1[.PackageName2].ClassName;
import PackageName1[.PackageName2].*;
Vi du : import java.util.Date;
import java.io.*;
Tt ca cac lp chun cua Java lu trong goi tn la java. Ban phai nhp tng goi hay lp
ban mun s dung, ring lp goi java.lang lu nhiu chc nng thng dung, c import ngm
inh bi b bin dich cho tt ca cac chng trinh.
Phat biu import cua goi chi co gia tri trn cac thanh phn khai bao public cua no.

II. GIAO DIN

1. inh nghia giao din


Vi t khoa interface, ban co th tru tng hoan toan giao din cua lp khoi s hin
thc cua no. Nghia la ban co th c ta mt lp phai lam gi, nhng khng cn bit lam nh th
nao. Giao din la tp hp cac khai bao phng thc, hng ma lp con k tha. Giao din co cu
phap tng t lp, nhng no khng co bin thanh vin, chi co khai bao hng va nhng phng

21
Goi va giao din

thc cua chung khai bao khng co thn. Trong thc t, iu nay co nghia rng ban co th inh
nghia nhng giao din ma khng cn am nhim phn hin thc no. S lng lp hin thc mt
giao din la tuy y. Mt lp cung co th hin thc s lng tuy y giao din.
hin thc mt giao din, mt lp phai cai t y u cac phng thc inh nghia
trong giao din. Vi t khoa interface, Java cho phep ban co nhng tin ich y u cho c im
mt giao din, nhiu phng thc cua tinh a hinh
Giao din c thit k h tr s quyt inh phng thc ng luc thi gian chay.
Thng thng, lp nay co th goi phng thc cua lp kia, ca hai lp cn hin din luc thi
gian dich. iu nay lam cho mi trng lp tr nn tinh va khng co kha nng m rng. Trong
mt h thng nh vy cy phn cp cang ngay cang bi y ln cao. Vi vy, giao din c inh
nghia han ch vic ngay cang nhiu lp con. No tach s inh nghia mt phng thc hay tp
cac phng thc ra khoi cy phn cp k tha. Vi cac giao din phn cp khac cac lp, do o cac
lp khng co quan h trong s phn cp cung co th hin thc cung mt giao din. Ta co th
thy y thc s la th manh giao din
Acess interface InterfaceName {
Type MethodName1(Parameter-List);
...
Type MethodNamen(Parameter-List);
Type Final-Var1 = Value;

Type Final-Varn = Value;
}
- Acess co th la public hay khng. Khi khng cha c ta nao, access la mc inh va giao din
chi co gia tri i vi cac thanh phn khac khai bao trong goi. Khi khai bao public, moi oan ma
u co th s dung giao din. Tt ca cac phng thc va bin hiu ngm la public nu giao din
khai bao la public
- Cac phng thc la cac phng thc tru tng, khng co thn, chung khng c hin thc
trong giao din.
- Cac bin co th khai bao trong khai bao giao din. Chung hiu ngm la final va static, nghia la
chung khng th bi thay i bi s hin thc cua lp. Chung phai c khi tao vi nhng gia
tri hng.

2. Hin thc giao din


Khi a inh nghia giao din, mt hay nhiu lp co th hin thc giao din. hin thc
giao din, t mnh implements trong inh nghia lp va sau o tao nhng phng thc inh
nghia trong giao din :
Acess class ClassName [extends SuperClass]
[implements InterfaceName1, InterfaceNamen] {
// Body of class
}
- Nu lp hin thc hai giao din co phng thc ging nhau, phng thc c goi tng ng
vi giao din o
- Nhng phng thc hin thc giao din phai khai bao public. Hinh thc cua phng thc hin
thc phai ging ht khi no c c ta trong inh nghia interface
- Hin thc tng phn : Nu mt lp cha mt giao din nhng khng hin thc y u cac
phng thc inh nghia trong giao din, lp o phai khai bao abstract
- Mt giao din ging nh mt lp tru tng, tuy nhin Class cua ban khng th k tha nhiu
lp, nn dung giao din thay cho lp tru tng, mt lp co th hin thc nhiu giao din. Vi
vy ma giao din cung cp nhiu s k tha.
Vi du 1 :

22
Goi va giao din

interface KiemTra {
void inSo(int p);
}
class HienThuc implements KiemTra {
public void inSo(int p) {
System.out.println(Gia tri cua p la : +p);
}
void boSung() {
System.out.println(Class hin thc giao din co th inh nghia thm +
thanh vin khac hay khng);
}
}
Vi du 2 :
class HTKhac implements KiemTra {
public void inSo(int p) {
System.out.println(Binh phng cua p la : +p*p);
}
}

3. Truy xut hin thc thng qua tham chiu giao din
Ban co th khai bao mt bin tham chiu n i tng kiu giao din ch khng hn la
lp. Khi ban goi phng thc thng qua mt trong nhng tham chiu n i tng kiu giao
din hay lp hin thc giao din, phin ban ung se c goi da trn th hin thc s cua giao
din ang tham chiu n. Phng thc thc thi c tim t ng luc chay.
Vi du :
class UngDung {
public static void main (String args[] {
KiemTra c = new HienThuc(); //c chi bit ham khai bao trong giao din
HienThuc d = new HienThuc(); //d bit cac ham khai bao trong HienThuc
HTKhac e = new HTKhac(); //e bit cac ham khai bao trong HTKhac
c. inSo(50);
c = d; // c by gi tham chiu n i tng kiu HienThuc
c.bo Sung();
c = e; // c by gi tham chiu n i tng kiu HTKhac
c. inSo(50);
}
}
Kt qua chng trinh la :
Gia tri cua p la : 50
Class hin thc giao din co th inh nghia thm thanh vin khac hay khng
Binh phng cua p la : 2500

4. Bin trong giao din


Ban co th dung giao din import nhng hng dung chung cho nhiu lp n gian
bng cach khai bao giao din cha nhng bin c khi tao bng nhng gia tri yu cu. Khi
ban a giao din o vao trong lp, tt ca nhng tn bin nay co pham vi nh mt hng. iu
nay ging nh s dung tp tin header trong C/C++ tao s lng ln hng bng #defined hay khai
bao const. Nu giao din khng cha phng thc nao, lp cha giao din nh vy thc s
khng hin thc iu gi ca. No tng t vic lp o import nhng bin hng cho khng gian lp
nh nhng bin final

23
Goi va giao din

5. K tha giao din


Mt giao din co th k tha giao din khac bng cach s dung t khoa extends. Cu phap
ging nh lp k tha. Khi mt lp hin thc mt giao din k tha t mt giao din khac, no
phai cung cp tt ca cac hin thc cho tt ca cac phng thc k ca phng thc trong danh sach
giao din cha ma giao din nay k tha

24
Lp String va Number

Chng : LP STRING VA NUMBER


I. TNG QUAT
Chung ta a bit cach dung t khoa extends khai bao mt lp la lp con cua mt lp
khac. Tuy nhin ban chi co th inh nghia mt lp cha cho lp con cua ban (Java khng ung h
nhiu s k tha lp), va thm chi bo qua t khoa extends trong mt khai bao lp, lp cua ban
cung co mt lp cha. iu nay dn n mt cu hoi la cac lp bt u t u ?
Nh m ta trong hinh sau, lp cao nht, lp ma t o tt ca cac lp xut phat t, la lp
Object inh nghia trong java.lang. Lp Object inh nghia va cai t cac hanh vi ma moi lp
trong Java cn n.

II. LP STRING VA STRINGBUFFER


Trong goi java.lang cha hai lp lu tr va thao tac d liu kiu ky t : String va
StringBuffer, c khai bao final, nghia la khng k tha
Ban dung lp String khi ban ang lam vic vi chui hng, ni dung khng th thay i.
StringBuffer c dung khi ban mun thay i ni dung cua chui.
Vi du : Phng thc reverse dung ca hai lp String va StringBuffer ao cac ky t cua chui.
public class ReverseString {
public static String reverse(String source) {
int i, len = source.length();
StringBuffer dest = new StringBuffer(len);
for (i = (len - 1); i >= 0; i--)
dest.append(source.charAt(i));
return dest.toString();
}
}

1. Lp String

Tao mt i tng
Nhiu String c tao t cac hng chui. Khi trinh dich bt gp mt chui ky t bao gia
cp nhay kep, no tao ra mt i tng chui ma co gia tri la chui bao gia cp nhay kep. Ban co
th dung hng String bt ky u ban dung i tng String
Ban co th tao i tng chui nh bt ky i tng nao khac cua java, dung t khoa
new
String s = new String();
String s = new String("Gobbledygook.");
hay co th vit :

25
Lp String va Number

String s = "Hola Mundo";


- Mt s cac ham khi tao cua lp String :
String()
String(byte bytes[])
String(byte bytes[],int startIndex, int numChars)
String(char chars[])
String(char chars[], int startIndex, int numChars)
String(String s)
String(StringBuffer s)
Vi du :
byte b[] = {65, 66, 67, 68, 69, 70};
String s1 = new String(b); // Khi tao s vi chui ABCDEF
String s2 = new String(b,2,3); // Khi tao s vi chui CDE
char c[] = {a,b,c,d,e,f);
String s3 = new String(c); // Khi tao s vi chui abcdef
String s4 = new String(c,2,3); // Khi tao s vi cac ky t cde
String s5 = new String(s2); // Tao i tng s3 cha cung day ky t nh s2

Cac phng thc thng dung cua lp String


- int length() : cho chiu dai chui
int len = source.length();
int len = "Goodbye Cruel World".length();
- char charAt(int index) : tra v ky t tai vi tri th index
char c = source.charAt(1);
char ch = abc.charAt(0); //Gan gia tri a cho ch
- boolean equals(String object) : kim tra hai chui co bng nhau khng, co phn bit hoa
thng
So sanh phng thc equals() va toan t = = khac nhau hoan toan. Phng thc dung so sanh
cac ky t trong i tng String. Toan t = = so sanh 2 i tng co cung tham chiu n cung
mt th hin.
String s1 = Hello;
String s2 = new String(s1); // tao s2 co ni dung nh s1, nhng khng tro n cung
// mt i tng
System.out.println(s1 equals s2 :+s1.equals(s2));
System.out.println(s1 = = s2 :+(s1= =s2));
Kt qua la :
s1 equals s2 : true
s1 = = s2 : false
- int compareTo(String str) : so sanh 2 chui, tra v gia tri :
nu < 0 : chui nho hn str
nu > 0 : chui ln hn str
nu = 0 : chui bng str
- int indexOf(int character) : tra v vi tri tim thy u tin (cui cung) cua ky t character
int lastIndexOf(int character)
- int indexOf(int character, int from) : tra v vi tri tim thy u tin (cui cung) cua ky t
character, k t vi tri from v cui chui (hay u chui)
int lastIndexOf(int character, int from)
- int indexOf(String string) : tra v vi tri tim thy u tin (cui cung) cua chui string
int lastIndexOf(String string)

26
Lp String va Number

- int indexOf(String string, int from) : tra v vi tri tim thy u tin (cui cung) cua chui
string, k t vi tri from v cui chui (hay u chui)
int lastIndexOf(String string, int from)
- String subString(int startIndex, int endIndex) : tra v chui con cua mt chui bt u t vi
tri startIndex n vi tri endIndex-1, nu khng co endIndex thi ly n cui chui
String org = This is a test;
String result = ;
result = org.subString(8);
- String replace(char orginal, char replacement) : thay th ky t replacement cho ky t
orginal
String s = Hello.replace(l,w); // Cho s bng Hewwo
- String trim() : ct bo khoang trng trc va sau chui
- String toLowerCase() : i chui thanh chui thng
- String toUpperCase() : i chui thanh chui hoa
String s = This is a test;
String upper = s.toUpperCase();
- Toan t + : kt ni hai i tng String, hay mt i tng String va mt gia tri khac thanh
i tng String,
String s1 = "two";
System.out.println("one" + s1 + "three");
System.out.println("Word v. " + 9+7);
Vi i tng String khng th thay i do o bt c luc nao ban mun thay i chung,
ban phai copy chui vao StringBuffer, nhng vi toan t +, ban co th vit nh sau vi Java t
chuyn sang StringBuffer va thay i chui
s1 = s1 + three;
Vi vy, co th vit lai chng trinh ao chui trn, khng cn thit phai chuyn sang
StringBuffer
public class ReverseString {
public static String reverse(String source) {
int i, len = source.length();
String dest = ;
for (i = (len - 1); i >= 0; i--)
dest = dest + source.charAt(i);
return dest;
}
}
- static String valueOf(object/var x) :
la ham lp, tra v mt chui chuyn i cac bin kiu s cp hay i tng x thanh mt
String
Vi du : PI la mt bin lp cua lp Math, in gia tri cua s PI :
System.out.println(String.valueOf(Math.PI));

2. Lp StringBuffer

Tao mt i tng StringBuffer


Phng thc khi tao cua lp StringBuffer co dang :
StringBuffer() : dung cho chui 16 ky t
StringBuffer(int length) : dung cho chui length ky t
Vi du : StringBuffer dest = new StringBuffer(25);

27
Lp String va Number

Cac phng thc thng dung cua lp StringBuffer


- int length() : cho chiu dai chui
- char charAt(int index) : tra v ky t tai vi tri th index
- void setCharAt(int index, char ch) : t ky t ch vao StringBuffer, tai vi tri index
- StringBuffer append(object/var x) : b sung i tng hay bin x kiu bt ky vao cui
StringBuffer. D liu c chuyn thanh chui trc khi b sung vao StringBuffer
int a = 20;
StringBuffer sb = new StringBuffer(40);
String s = sb.append(a =).append(a).toString();
- StringBuffer insert(int index, object/var x) : chen mt i tng hay bin x kiu bt ky vao
vi tri th index
StringBuffer sb = new StringBuffer("I Java!");
sb.insert(3, "like ");
System.out.println(sb); // Cho chui I like Java
- StringBuffer reverse() : ao ngc cac ky t cua chui
StringBuffer sb = new StringBuffer("I Java!");
sb.reverse();
- StringBuffer delete(int startIndex, int endIndex) : xoa chui con t startIndex n endIndex-
1
- StringBuffer deleteCharAt(int index) : xoa ky t tai vi tri index
- StringBuffer subString(int startIndex, int endIndex) : tra v chui con cua mt chui bt u
t vi tri startIndex n vi tri endIndex-1, nu khng co endIndex thi ly n cui chui
- StringBuffer replace(int startIndex, int endIndex, String str) : thay th chui str vao vi tri
bt u la startIndex n endIndex-1 cua chui

Ban hay xem thm java.lang.String and java.lang.StringBuffer co c inh nghia y


u cac phng thc va bin cai t cho hai lp nay

III. LP NUMBERS
Nh a noi trn, trong goi java.lang co sn nhng lp tng ng vi cac kiu s cp, co
th dung thay cho kiu s cp : lp Integer thay cho kiu int, lp Boolean cho kiu boolean
Lp Number la lp cha cua moi lp boc kiu
Cac lp boc kiu s: Byte, Double, Float, Integer, Long, Short
Cac lp bao boc cho cac kiu d liu khac : Boolean, Character, Void, Math

1. Tao mt i tng
Float f = new Float(25.5);
Float f = new Float(24.5);
- Cac ham khi tao cua cac lp boc kiu s
Float(double n)
Float(float n)
Float(string str)
Double(double n)
Double(string str)
Tng t vi cac lp boc kiu s khac

2. Cac phng thc thng dung cho cac lp kiu s


- Cac phng thc tra v gia tri cua cac i tng tng ng vi cac dang s khac nhau
byte byteValue() // tra v dang s byte
short shortValue()

28
Lp String va Number

int intValue()
long longValue()
double doubleValue()
float floatValue()
Integer intObj = new Integer(25);
int i = intObj.intValue(); // cho i = 25
- Cac phng thc lp chuyn i mt chui thanh gia tri s tng ng
static byte parseFloat(String str)
static short parseShort(String str)
static int parseInt(String str)
static long parseLong(String str)
static double parseDouble(String str)
static float parseFloat(String str)
String s = 42;
int i =Integer.parseInt(s); // cho i = 42
- int compareTo(floatObj/floatVar f ) : so sanh gia tri cua i tng s vi i tng hay bin
s f, tra v gia tri :
nu = 0 : bng nhau
nu = s m : gia tri cua i tng nho hn f
nu = s dng : gia tri cua i tng ln hn f
- boolean equals(floatObj f ) : nu = true nghia la gia tri cua i tng bng f
- string toString() : chuyn mt i tng thanh String.
Tt ca cac lp k tha toString t lp Object va nhiu lp khac trong goi java.lang vit e
phng thc nay cung cp mt cai t ma co y nghia vi class o. Chng han, cac lp boc
kiu Character, Integer, Boolean u vit e toString
Vi du : Integer i = new Integer(20);
System.out.println(i.toString());
- static String toString(var n) : y la ham lp chuyn bin s n thanh chui
String s = Integer.toString(25) // Cho chui s la 25
- static Float valueOf(String str) : y la ham lp tra v i tng Float cua gia tri str, tng t
vi cac lp boc kiu s khac
String s = 42.5;
Integer i = Integer.valueOf(s);

Vi du : Vit oan chng trinh nhp : ho tn khng qua 20 ky t, nm sinh >1970 va <2100, co
kim tra cho n khi ngi dung nhp ung
import java.io.*;
public class Nhap {
public static void main (String [] args) throws IOException {
DataInputStream kbd = new DataInputStream (System.in);
String s = null;
String ns = null;
// Nhap ho ten
while (true) {
System.out.print("Nhap Ho va ten : ");
s = kbd.readLine();
if ( (s.length() <=20) && (s.length() != 0) ) {
System.out.println("Ho va ten la : "+ s);
break;
}

29
Lp String va Number

System.out.println("Phai nhap ho ten khong qua 20 ky tu");


}
// Nhap nam sinh
while (true) {
try {
System.out.print("Nhap nam sinh : ");
s = kbd.readLine();
int i =Integer.parseInt(s);
if ((i<=1970) || (i>=2100)) throw new
NumberFormatException();
System.out.println("Nam sinh la : "+i);
break;
}
catch (IOException e){}
catch(NumberFormatException e){
System.out.println("Ban Phai nhap lai nam sinh trong
khoang
1970 den 2100");
}
}
}
}

Ban hay xem thm java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Double,


java.lang.Float co c inh nghia y u cac phng thc va bin cai t cho cac lp nay

30
Muc luc

MUC LUC
Chng : LP TRINH HNG I TNG TRONG JAVA
I. KHAI NIM LP TRINH HNG I TNG
1. Lp trinh hng i tng .......................................................................................
2. Tru tng hoa .........................................................................................................
II. C CH TRIN KHAI M HINH HNG I TNG
1. Tinh ong goi ...........................................................................................................
2. Tinh k tha..............................................................................................................
3. Tinh a hinh..............................................................................................................

Chng: I TNG VA LP, MANG


I. XY DNG LP ...................................................................................................................
II. TAO I TNG
1. Khai bao i tng ...................................................................................................
2. Cach truy xut thanh phn cua lp ...........................................................................
III. GII THIU V PHNG THC
1. Khai bao phng thc ..............................................................................................
2. Pham vi truy xut thanh phn cua lp ......................................................................
3. Phng thc Main() .................................................................................................
4. Ham khi tao ............................................................................................................
5. Ham huy ...................................................................................................................
6. T khoa this ..............................................................................................................
7. Nap chng ham .........................................................................................................
8. Truyn tham i .......................................................................................................
IV. LP K THA
1. Khai bao k tha.......................................................................................................
2. Vit chng ham ........................................................................................................
3. T khoa super ...........................................................................................................
V. LP VA PHNG THC TRU TNG........................................................................
VI. LP HNG (KHNG K THA) VA HAM HNG (KHNG VIT CHNG)
1. Cm s vit chng ....................................................................................................
2. Cm s k tha .........................................................................................................
VII. LP LNG NHAU
VIII. CHUYN I KIU
1. Kiu s cp thanh kiu phc hp .............................................................................
2. Gia cac kiu phc hp ............................................................................................
IX. MANG
1. Tao va s dung mang ...............................................................................................
2. Mang a chiu ..........................................................................................................
3. Sao chep mang..........................................................................................................

Chng : GOI VA GIAO DIN


I. GOI
1. inh nghia goi ..........................................................................................................
2. iu khin truy xut .................................................................................................
3. S dung goi ..............................................................................................................
II. GIAO DIN
1. inh nghia giao din ................................................................................................

31
Muc luc

2. Hin thc giao din ..................................................................................................


3. Truy xut hin thc thng qua tham chiu giao din ...............................................
4. Bin trong giao din .................................................................................................
5. K tha giao din .....................................................................................................

Chng : LP STRING VA NUMBER


I. TNG QUAT ..............................................................................................................
II. LP STRING ............................................................................................................
III. LP NUMBER ........................................................................................................

32

You might also like