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
ị
ượ
ộ ớ
ớ
ả ử
ổ ừ ộ ớ ẵ
ở ộ
ả