THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 141

public static boolean

sameCard(Card c1, Card c2) {

return

(c1.suit == c2.suit && c1.rank == c2.rank);

}

B i v y t t c nh ng đi u ta c n làm là vi t l i nó d

i d ng m t ph

ng th c cho đ i t

ng:

ở ậ ấ ả

ế ạ

ướ ạ

ươ

ố ượ

public boolean

equals(Card c2) {

return

(suit == c2.suit && rank == c2.rank);

}

M t l n n a, tôi đã b đi t khóa

ộ ầ

static cũng nh thông s đ u,

ư

ố ầ c1. Sau đây là cách kích ho t ph ng

ươ

th c m i này:

Card card =

new

Card(1, 1);

Card card2 =

new

Card(1, 1);

System.out.println(card.equals(card2));

Bên trong equals, card là đ i t

ng hi n hành còn

ố ượ

card2 là tham s ,

ố c2. Đ i v i nh ng ph ng th c

ố ớ

ươ

ho t đ ng trên hai đ i t

ng có cùng ki u, đôi khi tôi dùng h n t khóa

ạ ộ

ố ượ

ẳ ừ

this đ ng th i g i tham s kia

ờ ọ

là that:

public boolean

equals(Card that) {

return

(

this

.suit == that.suit &&

this

.rank == that.rank);

}

Tôi nghĩ r ng theo cách này, mã l nh s d đ c h n.

ẽ ễ ọ ơ

15.5 Nh ng đi u kì qu c và l i sai

N u b n có các ph

ng th c đ i t

ng và l p đ i t

ng bên trong cùng m t l p, thì th t d nh m l n.

ế

ươ

ứ ố ượ

ố ượ

ộ ớ

ậ ễ

M t cách thông th

ng đ t ch c l i đ nh nghĩa l p là đ t t t c nh ng constructor đ u, theo sau là

ườ

ể ổ ứ ờ ị

ặ ấ ả

ở ầ

t t c nh ng ph

ng th c đ i t

ng và ti p theo là ph

ng th c l p.

ấ ả

ươ

ứ ố ượ

ế

ươ

ứ ớ

B n có th có m t ph

ng th c đ i t

ng trùng tên v i ph

ng th c l p, mi n là chúng không có cùng

ươ

ứ ố ượ

ươ

ứ ớ

s l

ng cũng nh ki u các tham s . Gi ng các hình th c quá t i (overloading) khác, Java quy t đ nh

ố ượ

ư ể

ế ị

xem c n kích ho t d ng nào b ng cách nhìn vào nh ng tham s mà b n cung c p.

ạ ạ

Bây gi khi đã bi t ý nghĩa c a t khóa

ế

ủ ừ

static, có l b n đã hình dung ra đ

c r ng

ẽ ạ

ượ ằ main là m t ph ng

ươ

th c l p, nghĩa là không có m t “đ i t

ng hi n th i” n i nó đ

c kích ho t.

ứ ớ

ố ượ

ơ

ượ

ạ Vì không có đ i t ng

ố ượ

hi n th i trong m t ph

ng th c l p, nên s có l i khi dùng t khóa

ươ

ứ ớ

this. N u b n th thì s nh n đ

c

ế

ượ

m t thông báo l i ki u nh “Undefined variable: this.”

ư

Đ ng th i, b n cũng không th tham chi u đ n nh ng bi n th c th mà không dùng kí pháp d u ch m

ế

ế

ế

l n cung c p m t tên đ i t

ng. N u th làm, b n s nh n m t thông báo l i nh “non-static variable…

ố ượ

ế

ạ ẽ

ư

cannot be referenced from a static context.” Nói “non-static variable” nghĩa là bi n th c th (“instance

ế

variable.”)

15.6 Th a k

ế

Đ c đi m ngôn ng th

ng g n v i l p trình h

ng đ i t

ng nh t là tính

ữ ườ

ớ ậ

ướ

ố ượ

th a k

ế. Th a k là kh

ừ ế

năng đ nh nghĩa đ

c m t l p m i là phiên b n s a đ i t m t l p s n có. M r ng hình nh ví von

ượ

ộ ớ

ả ử

ổ ừ ộ ớ ẵ

ở ộ