Xõy d ngClass trong Java ự

Một phần của tài liệu Bài giảng về Java (Trang 50)

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ứ

Một phần của tài liệu Bài giảng về Java (Trang 50)

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

(151 trang)