Cài đ t cỏc class là cụng vi c thặ ệ ường xuyờn c a l p trỡnh viờn Java. Cỏc v n đ c aủ ậ ấ ề ủ cụng vi c thi t k m t l p b ng ngụn ng Java s đệ ế ế ộ ớ ằ ữ ẽ ược đ c p dề ậ ưới đõy.
V.1 C u trỳc c a classấ ủ
[<Cỏch truy xu t>] class <tờn l p> [extends <tờn l p cha>] [implements <tờn giaoấ ớ ớ di n>]{ệ <cỏc thành ph n c a l p>;ầ ủ ớ } Ta s l n lẽ ầ ượt xem xột t ng thành ph n:ừ ầ <Cỏch truy xu t>: ấ public: Cú th truy c p l p t cỏc l p khỏc.ể ậ ớ ừ ớ
abstract: L p tr u tớ ừ ượng, khụng được kh i t o đ i tở ạ ố ượng c a l p này. Cỏc l p tr uủ ớ ớ ừ tượng được thi t k ch cho m c đớch k th a.ế ế ỉ ụ ế ừ
final: Khụng cho phộp k th a.ế ừ
N u <cỏch truy xu t> khụng đế ấ ược xỏc đ nh, m c đ nh là public.ị ặ ị
<tờn l p>:ớ Tờn c a l p, n u <cỏch truy xu t > là public thỡ tờn l p ph i trựng v i tờnủ ớ ế ấ ớ ả ớ file ch a l p.ứ ớ
<tờn l p cha>:ớ Tờn c a l p cha mà l p hi n t i th a k .ủ ớ ớ ệ ạ ừ ế
<tờn giao di n>:ệ Tờn c a giao di n đủ ệ ược cài đ t t i l p. Đõy cú th là m t danh sỏchặ ạ ớ ể ộ cỏc giao di n phõn tỏch b i d u “,”.ệ ở ấ
<cỏc thành ph n c a l p>:ầ ủ ớ đõy là ph n thõn c a l p ch a cỏc đ nh nghĩa cho cỏcầ ủ ớ ứ ị thu c tớnh và cỏc phộ ương th c thành ph n. Ta s l n lứ ầ ẽ ầ ượt xem xột t i cỏc thành ph n này.ớ ầ
V.2 Cỏc thu c tớnh thành ph n:ộ ầ
Khai bỏo thu c tớnh chớnh là vi c khai bỏo cỏc bi n. Khi khai bỏo trong l p chỳngộ ệ ế ớ thường được xỏc đ nh ph m vi ho t đ ng là m t trong cỏc d ng:ị ạ ạ ộ ộ ạ
• public: Bi n cú th truy c p b t c l p nào.ế ể ậ ở ấ ứ ớ • private: Ch đỉ ược truy c p trong chớnh l p đú.ậ ớ
• protected: Ch đỉ ược truy c p trong l p đú và cỏc l p k th a.ậ ớ ớ ế ừ
M c đ nh thỡ ph m vi truy c p c a bi n là public, cỏc bi n thụng thặ ị ạ ậ ủ ế ế ường cú ph m viạ private.
Vớ d : ụ
public int Tuoi;
private String HoVaTen;
Cỏch truy c p bi n r t đ n gi n, ph thu c vào bi n thu c d ng nào trong 2 d ng sau:ậ ế ấ ơ ả ụ ộ ế ộ ạ ạ 1. Bi n cú ph m vi đ i tế ạ ố ượng: Đõy là bi n t n t i cựng v i s t n t i c a đ i tế ồ ạ ớ ự ồ ạ ủ ố ượng. Mu n truy c p vào bi n, trố ậ ế ước h t ph i kh i t o m t đ i tế ả ở ạ ộ ố ượng thu c l p.ộ ớ
SinhVien sv = new SinhVien(20,”Nguyen Van A”);
Truy c p vào bi n Tuoi nh sau: sv.Tuoi, vớ d gỏn Tuoi c a sinh viờn này b ng 21:ậ ế ư ụ ủ ằ Sv.Tuoi=21;
2. Bi n cú ph m vi l p (bi n tĩnh): Đõy là bi n cú ph m vi t n t i trong m i đ i tế ạ ớ ế ế ạ ồ ạ ọ ố ượng c a l p đủ ớ ượ ạc t o ra trong chương trỡnh đang ch y. Giỏ tr c a bi n đạ ị ủ ế ược dựng chung gi a cỏcữ đ i tố ượng.
Khi khai bỏo m t bi n cú ph m vi l p, ta c n thờm t khúa static nh vớ d sau:ộ ế ạ ớ ầ ừ ư ụ public static int MaSo;
Khi truy c p, ta cú th khụng c n kh i t o đ i tậ ể ầ ở ạ ố ượng mà tr c ti p thụng qua tờn l p:ự ế ớ SinhVien.MaSo = 10;
Cỏc bi n cú ph m vi l p r t ớt khi đế ạ ớ ấ ượ ử ục s d ng, trong khi cỏc h ng static l i r t hayằ ạ ấ được dựng. Lý do là trong th c t , cỏc l p đ i tự ế ớ ố ượng thường cú cỏc thu c tớnh chung, c đ nhộ ố ị cú m i đ i tở ọ ố ượng. H n n a, khi chỳng đó khụng ph thu c vào m t đ i tơ ữ ụ ộ ộ ố ượng c th nào thỡụ ể ta cũng khụng c n kh i t o m t đ i tầ ở ạ ộ ố ượng đ truy c p. Do đú, ta s cài đ t chỳng nh là cỏcể ậ ẽ ặ ư h ng static.ằ
Vớ d :ụ
public static final String MauDa = “Vang”; // M i sinh viờn đ u cú màu da là “Vang” ọ ề ho c khỏi bỏo h ng s PI:ặ ằ ố
public static final double PI = 3.14159265358979323846; Là h ng s c a l p Math. Khi truy c p ta ch c n g i: Math.PIằ ố ủ ớ ậ ỉ ầ ọ
Chỳ ý: Cỏc bi n r t ớt khi đế ấ ược khai bỏo là public vỡ cú th thay đ i giỏ tr c a nú bờnể ổ ị ủ ngoài l p nờn khú qu n lý. Trong khi đú cỏc h ng thớ ả ằ ường luụn được khai bỏo là public vỡ chỳng được dựng chung và khụng th b thay đ i do t khúa final (h ng).ể ị ổ ừ ằ
Bi n thisế
Bi n this là bi n đ i tế ế ố ượng c a l p t n t i ng m trong m i l p.ủ ớ ồ ạ ầ ỗ ớ
Thường dựng bi n this đ truy c p đ n cỏc thu c tớnh c a l p b khai bỏo trựng trongế ể ậ ế ộ ủ ớ ị ph m vi cỏc phạ ương th c c a l p.ứ ủ ớ
Vớ d :ụ
public class TestThis {
private int number = 10; public void PrintNumber()
{ int number =20; // khai bỏo trựng v i bi n c a l pớ ế ủ ớ System.out.println(number); //in bien number = 20
System.out.println(this.number);//in bien number =10 }
}
V.3 Cỏc phương th c thành ph nứ ầ
Phương th c thành ph n là s cài đ t cỏc hành vi c a đ i tứ ầ ự ặ ủ ố ượng. Cỳ phỏp khai bỏo m tộ phương th c trong l p nh sau:ứ ớ ư
[<Cỏch truy xu t> <cỏch c p nh t>] <Ki u giỏ tr tr v > <Tờn phấ ậ ậ ể ị ả ề ương th c>([<danhứ sỏch bi n hỡnh th c>]) [<m nh đ throws>]ế ứ ệ ề
{
<N i dung c a phộ ủ ương th c>;ứ }
<Cỏch truy xu t>:ấ
• private: phương th c này ch đứ ỉ ược truy xu t bờn trong l p ch a nú.ấ ớ ứ • public: cú th truy xu t t b t kỳ l p bờn ngoài nào.ể ấ ừ ấ ớ
• protected: ch cỏc l p là d n xu t c a l p ch a phỉ ớ ẫ ấ ủ ớ ứ ương này m i truy xu t đớ ấ ược nú.
• N u khụng khai rừ cỏch truy xu t, cỏc phế ấ ương th c s cú cỏch truy xu t m cứ ẽ ấ ặ đ nh là public.ị
Cỏc phương th c khai bỏo ch ng l p d n xu t ph i cú m c đ truy c p m nh h nứ ồ ở ớ ẫ ấ ả ứ ộ ậ ạ ơ ho c gi ng v i m c đ truy c p l p cha.ặ ố ớ ứ ộ ậ ở ớ
< Cỏch c p nh t>ậ ậ
• static: phương th c tỏc đ ng khụng ph thu c vào cỏc đ i tứ ộ ụ ộ ố ượng c th , nú cúụ ể th để ược g i mà khụng c n kh i t o đ i tọ ầ ở ạ ố ượng c a l p. ủ ớ
• abstract: phương th c đ n gi n nh t, khụng cài đ t gỡ trong l p khai bỏo nú,ứ ơ ả ấ ặ ở ớ t c là nú khụng cú ph n thõn. Phứ ầ ương th c này s đứ ẽ ược phỏt tri n trong cỏc l pể ớ là d n xu t c a l p ch a nú. L p cú ch a phẫ ấ ủ ớ ứ ớ ứ ương th c abstract cũng ph i đứ ả ược khai bỏo abstract.
• final: phương th c này đứ ược b o v khụng cho cỏc l p d n xu t khai bỏo và càiả ệ ớ ẫ ấ đ t l i.ặ ạ
• native: là phương th c đứ ược vi t b ng ngụn ng khỏc java.ế ằ ữ
• synchronyzed: đ m b o d li u khụng b sai l c khi cựng m t lỳc 2 phả ả ữ ệ ị ạ ộ ương th c truy c p cựng m t d li u.ứ ậ ộ ữ ệ
<Ki u giỏ tr tr v >:ể ị ả ề
integer, String, char, float, ...: là cỏc ki u d li u mà phể ữ ệ ương th c tr v .ứ ả ề void: phương th c khụng tr v giỏ tr .ứ ả ề ị
Khi xỏc đ nh ki u giỏ tr tr v , khi k t thỳc cỏc lu ng x lý trong phị ể ị ả ề ế ồ ử ương th c nh tứ ấ thi t ph i cú cõu l nh return đ tr v m t giỏ tr thu c ki u đú.ế ả ệ ể ả ề ộ ị ộ ể
public static int max(int num1, int num2)
{ if(num1>num2) return num1; else return num2; }
V <m nh đ throws> chỳng ta s xem xột k trong ph n x lý ngo i l .ề ệ ề ẽ ỹ ầ ử ạ ệ
V.4 G i và truy n tham s cho phọ ề ố ương th cứ
• Cỏc tham s ki u c b n đố ể ơ ả ược truy n theo ki u tham tr .ề ể ị
• Cỏc tham s cú ki u đ i tố ể ố ượng được truy n theo ki u tham chi u.ề ể ế Cỏc chỳ ý khi truy n tham s cho phề ố ương th c:ứ
• Cỏc phương th c khụng th làm thay đ i giỏ tr c a cỏc tham s cú ki u nguyờnứ ể ổ ị ủ ố ể th yủ
• Phương th c cú th làm thay đ i tr ng thỏi c a tham s ki u đ i tứ ể ổ ạ ủ ố ể ố ượng
• Phương th c khụng th làm cho tham s đ i tứ ể ố ố ượng tham chi u t i m t đ iế ớ ộ ố tượng m i. ớ
G i m t phọ ộ ương th c:ứ
Cú 2 cỏch g i phọ ương th c:ứ
N u phế ương th c tr v giỏ tr , vi c g i phứ ả ề ị ệ ọ ương th c thứ ường được x lý nh m t giỏử ư ộ tr .ị
Vớ d : int larger = max(3, 5);ụ
ho c ta cú th in giỏ tr tr v c a cu c g i phặ ể ị ả ề ủ ộ ọ ương th c: System.out.println(max(3,ứ 5));
N u phế ương th c tr v void, vi c g i phứ ả ề ệ ọ ương th c là cõu l nh.ứ ệ Vớ d phụ ương th c println() tr v void: System.out.println("Hello!");ứ ả ề
V.6 Cỏc hàm và phương th c đ c bi tứ ặ ệ
Phương th c kh i t o: ứ ở ạ
Phương th c kh i t o (constructor) dựng đ kh i t o m t đ i tứ ở ạ ể ở ạ ộ ố ượng c a l p và đ tủ ớ ặ tr ng thỏi ban đ u cho đ i tạ ầ ố ượng b ng cỏch xỏc đ nh giỏ tr cho cỏc thu c tớnh c a l p. ằ ị ị ộ ủ ớ
M i l p cú th cú 1 ho c nhi u phỗ ớ ể ặ ề ương th c kh i t o.ứ ở ạ
Phương th c kh i t o cú cựng tờn v i tờn l p và khụng cú ki u d li u tr v .ứ ở ạ ớ ớ ể ữ ệ ả ề
Khi khụng khai bỏo phương th c kh i t o, đ i tứ ở ạ ố ượng đượ ạc t o ra b ng phằ ương th cứ kh i t o m c đ nh v i cỏc giỏ tr m c đ nh c a cỏc thu c tớnh.ở ạ ặ ị ớ ị ặ ị ủ ộ
Constructor khụng được k th a, nú ch đế ừ ỉ ược đ nh nghĩa cho chớnh l p cha. V n đ sị ớ ấ ề ử d ng phụ ương th c kh i t o c a l p cha trong cỏc l p d n xu t s bàn trong ph n “Tớnh th aứ ở ạ ủ ớ ớ ẫ ấ ẽ ầ ừ k ”ế
Phương th c h y:ứ ủ
Trỏi v i phớ ương th c kh i t o, phứ ở ạ ương th c h y đứ ủ ược g i khi đ i tọ ố ượng được gi iả phúng. Tuy nhiờn, trong Java cụng vi c này đệ ược làm t đ ng, l p trỡnh viờn khụng c n quanự ộ ậ ầ tõm. Trong trường h p c n thi t ta cú th khai bỏo phợ ầ ế ể ương th c h y theo cỳ phỏp:ứ ủ
protected void finalize() { // Body of Method }
Đõy là m t hàm đ c bi t độ ặ ệ ược cài đ t trong l p đặ ớ ược g i th c thi đ u tiờn trongọ ự ầ chương trỡnh. Vỡ nú được g i khi ch a cú đ i tọ ư ố ượng nào đượ ạc t o ra nờn nú luụn được khai bỏo là static. H n n a, vi c g i hàm main() đơ ữ ệ ọ ương nhiờn là di n ra bờn ngoài l p nờn nú cũngễ ớ c n cú m c đ truy c p là public. ầ ứ ộ ậ
Hàm main() thường khụng tr v giỏ tr nào nờn ki u giỏ tr tr v c a nú là void.ả ề ị ể ị ả ề ủ Hàm main() cú m t tham s là m t m ng cỏc chu i ch a n i dung cỏc tham s dũngộ ố ộ ả ỗ ứ ộ ố l nh.ệ
V.7 Khai bỏo ch ng cỏc phồ ương th cứ
Cỏc phương th c trong cựng m t l p cú th cú cựng tờn nh ng nh t đ nh s lứ ộ ớ ể ư ấ ị ố ượng cỏc tham s ho c ki u c a chỳng ph i khỏc nhau. Đi u này g i là khai bỏo ch ng phố ặ ể ủ ả ề ọ ồ ương th c.ứ
T phiờn b n Java 1.5, ki u giỏ tr tr v cũng đừ ả ể ị ả ề ược xem nh m t y u t đ phõn bi tư ộ ế ố ể ệ cỏc phương th c.ứ
Sau đõy là chương trỡnh vớ d v xõy d ng cỏc class trong Java:ụ ề ự abstract class People // L p tr u tớ ừ ượng
{
protected int Tuoi;
protected String HoVaTen;
public static final String MauDa=”Vang”; //h ng sằ ố // Phương th c kh i t o ứ ở ạ
public People(int t,String ht) {
Tuoi=t; HoVaTen=ht; }
// Phương th c hi n th tờn và tu i c a m t ngứ ể ị ổ ủ ộ ười public String toString(){
return HoVaTen + "," + String.valueOf(Tuoi); };}
Sau đú, ta cú m t l p SinhVien k th a t l p People trờn:ộ ớ ế ừ ừ ớ public class SinhVien extends People
{
private String Lop;
private double DiemTongKet; public static int MaSo; // bi n l pế ớ // Phương th c kh i t oứ ở ạ
public SinhVien(int t,String ht,String l,double dtk) {
super(t,ht); // G i phọ ương th c kh i t o c a l p cha cho cỏc thu c tớnh kứ ở ạ ủ ớ ộ ế th aừ
// Cỏc thu c tớnh khụng k th a độ ế ừ ược gỏn tường minh Lop = l; DiemTongKet=dtk; } // Hàm main 54
public static void main(String[] argvs) {
// Truy c p vào bi n l p khụng c n kh i t o đ i tậ ế ớ ầ ở ạ ố ượng SinhVien.MaSo=10;
// Kh i t o m t đ i tở ạ ộ ố ượng sinh viờn, MaSo c a sinh viờn này s là 10ủ ẽ SinhVien k = new SinhVien(23,"Nguyen Thi Mai","Letio3",7.15); System.out.print(k.MaSo);
SinhVien.MaSo=11;
// Kh i t o m t đ i tở ạ ộ ố ượng sinh viờn, MaSo c a sinh viờn này s là 11ủ ẽ SinhVien k1 = new SinhVien(20,"Pham Anh Thu","Letio3",8.15); System.out.print(k.toString());
People p = new People(20,"Pham Anh Hoa"); // Bỏo l i dũng nàyỗ }
}
Trong chương trỡnh trờn, vi c kh i t o m t đ i tệ ở ạ ộ ố ượng thu c l p People s b bỏo l i doộ ớ ẽ ị ỗ l p này là l p tr u tớ ớ ừ ượng. Chỳng ta s tr l i v n đ này trong ph n “Tớnh k th a”.ẽ ở ạ ấ ề ầ ế ừ
V.8 L p l ng nhau – l p n iớ ồ ớ ộ
Co thờ đinh nghia mụt l p bờn trong mụt l p khac. L p nh võy goi la l p lụng (́ ̉ ̣ ̃ ̣ ớ ̣ ớ ́ ớ ư ̣ ̣ ̀ ớ ̀ Nested Class) va đ̀ ược cai đăt nh sau ̀ ̣ ư :
class EnclosingClass{ // L p bao bờn ngoaiớ ̀ . . .
static class StaticNestedClass { // L p lụng tinhớ ̀ ̃ . . .
}
class InnerClass { // L p lụng phi tinh hay l p nụi bụớ ̀ ̃ ớ ̣ ̣ . . .
} }
L p lụng chi đớ ̀ ̉ ược biờt bờn trong ́ ph m vi cua l p bao bờn ngoai. Trỡnh biờn dich Java seạ ̉ ớ ̀ ̣ ̃ bao lụi nờu mụt đoan ma bõt ky c a l p bờn ngoài truy c p tr c tiờp l p lụng.́ ̃ ́ ̣ ̣ ̃ ́ ̀ ủ ớ ậ ự ́ ớ ̀
Mụt l p lụng c̣ ớ ̀ o quyờn truy cõp đờn cac thanh viờn cua l p bao bờn ngoai, thõm chi nờú ̀ ̣ ́ ́ ̀ ̉ ớ ̀ ̣ ́ ́ chung đ́ ược khai bao private. Tuy nhiờn, l p bao khụng thờ truy xuõt cac thanh phõn cua l ṕ ớ ̉ ́ ́ ̀ ̀ ̉ ớ lụng. ̀
Co hai kiờu l p lụng : tinh va phi tinh. ́ ̉ ớ ̀ ̃ ̀ ̃
L
p lụng tinhớ ̀ ̃ (static nested class) được bụ sung t khoa static̉ ừ ́ . No khụng thờ tham chiờú ̉ ́ tr c tiờp đờn biờn hay phự ́ ́ ́ ương th c đụi tứ ́ ượng được đinh nghia trong l p bao, ma chi dung̣ ̃ ớ ̀ ̉ ̀ chung thụng qua đụi t́ ́ ượng. Vi gi i han nay nờn l p lụng tinh it đ̀ ớ ̣ ̀ ớ ̀ ̃ ́ ược dung. H̀ õu hờt cac l p̀ ́ ́ ớ lụng la l p nụi bụ̀ ̀ ớ ̣ ̣.
L
p lụng phi tinhớ ̀ ̃ (nonstatic nested class) khụng bụ sung t khoa static, con ̉ ừ ́ ̀ được goi lạ ̀ l p nụi bụ ớ ̣ ̣(inner class). No co thờ truy cõp tr c tiờp đờn cac biờn va ph́ ́ ̉ ̣ ự ́ ́ ́ ́ ̀ ương th c đụi tứ ́ ượng.
class Outer {
int outer_x = 100; void test() {
Inner inner = new Inner(); inner.display_x();
}
class Inner { // co thờ truy xuõt tr c tiờp biờn đụi t́ ̉ ́ ự ́ ́ ́ ượng cua l p Ỏ ớ uter int inner_y = 10;
void display_x() {
System.out.println(“display : outer_x = “ + outer_x); }
}
void display_y() { // khụng thờ truy xuõt biờn đụi t̉ ́ ́ ́ ượng cua l p Inner̉ ớ System.out.println(“display : inner_y = “ + inner_y); // Error }
}
class InnerClassDemo {
public static void main(String args[]) { Outer outer = new Outer(); outer.test();
} }
Trong Java cú s d ng m t k thu t cài đ t l p n i n c danh, t c là khụng cú tờn, khiử ụ ộ ỹ ậ ặ ớ ộ ặ ứ x lý cỏc s ki n. Vớ d :ử ự ệ ụ
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
System.exit(0);
}
public void windowIconified(WindowEvent e) {System.exit(0);} } );
đõy, ta cú m t l p n c danh k th a t l p WindowAdapter. Nú đ c khai bỏo
Ở ộ ớ ặ ế ừ ừ ớ ượ
ch ng 2 phồ ương th c c a WindowAdapter.ứ ủ
VI. Tớnh k th a trong Javaế ừ
Đ theo dừi tớnh k th a trong Java để ế ừ ược cài đ t nh th nào, trong ph n này chỳng taặ ư ế ầ s xem xột m t vớ d v qu n lý nhõn s t i m t cụng ty.ẽ ộ ụ ề ả ự ạ ộ
VI.1 S k th a cỏc thu c tớnh và phự ế ừ ộ ương th cứ