Các biến lớp
Để tạo một biến lớp, ta dùng từ khóa static khi khai báo:
PHP:
accessSpecifier static variableName[= initialValue ];
Ví dụ, chúng ta đang dùng các số nguyên để mô tả “tờ giấy bạc” trong wallet của Adult. Điều đó hoàn toàn chấp nhận được, nhưng sẽ thật tuyệt nếu ta đặt tên cho các giá trị nguyên này để chúng ta có thể dễ dàng hiểu con số đó biểu thị cho cái gì khi ta đọc mã lệnh. Hãy khai báo một vài hằng số để làm điều này, ở chính ngay nơi ta khai báo các biến cá thể trong lớp của mình:
PHP:
protected static final int ONE_DOLLAR_BILL = 1;
protected static final int FIVE_DOLLAR_BILL = 5;
protected static final int TEN_DOLLAR_BILL = 10;
protected static final int TWENTY_DOLLAR_BILL = 20;
protected static final int FIFTY_DOLLAR_BILL = 50;
protected static final int ONE_HUNDRED_DOLLAR_BILL = 100;
PHP:
public static void main(String[] args) {Adult myAdult = new Adult();myAdult.addMoney(new int[] { Adult.ONE_DOLLAR_BILL, Adult.FIVE_DOLLAR_BILL });System.out.println(myAdult);
}
Các phương thức lớp
Như ta đã biết, ta gọi một phương thức cá thể như sau:
PHP:
variableWithInstance.methodName();
PHP:
ClassName.methodName();
Chúng ta không cần đến một cá thể để gọi phương thức này. Chúng ta đã gọi nó thông qua chính bản thân lớp. Phương thức main() mà ta đang dùng chính là một phương thức lớp. Hãy nhìn chữ ký của nó. Chú ý rằng nó được khai báo với từ khóa public static. Chúng ta đã biết định tố truy nhập này từ trước đây. Còn từ khóa static chỉ ra rằng đây là một phương thức lớp, đây chính là lý do mà các phương thức kiểu này đôi khi được gọi là cácphương thức static. Chúng ta không cần có một cá thể của Adult để gọi phương thức main().
Chúng ta có thể xây dựng các phương thức lớp cho Adult nếu ta muốn, mặc dù thực sự không có lý do để làm điều đó trong trường hợp này. Tuy nhiên, để minh họa cách làm, ta sẽ bổ sung thêm một phương thức lớp tầm thường:
PHP:
public static void doSomething() {System.out.println("Did something");
}
PHP:
Adult.doSomething();Adult myAdult = new Adult();myAdult.doSomething();
So sánh các đối tượng với toán tử ==
Có hai cách để so sánh các đối tượng trong ngôn ngữ Java:
* Toán tử ==
* Toán tử equals()
Cách đầu tiên, và là cách cơ bản nhất, so sánh các đối tượng theo tiêu chí ngang bằng đối tượng (object equality). Nói cách khác, câu lệnh:
PHP:
a == b
PHP:
int int1 = 1;int int2 = 1;Integer integer1 = new Integer(1);Integer integer2 = new Integer(1);Adult adult1 = new Adult();Adult adult2 = new Adult();
System.out.println(int1 == int2);System.out.println(integer1 == integer2);integer2 = integer1;System.out.println(integer1 == integer2);System.out.println(adult1 == adult2);
So sánh các đối tượng bằng equals()
Bạn gọi phương thức equals() trên một đối tượng như sau:
PHP:
a.equals(b);
Phương thức equals() là một phương thức của lớp Object, vốn là lớp cha của mọi lớp trong ngôn ngữ Java. Điều đó có nghĩa là bất cứ lớp nào bạn xây dựng nên cũng sẽ thừa kế hành vi cơ sở equals() từ lớp Object. Hành vi cơ sở này không khác so với toán tử ==. Nói cách khác, mặc định là hai câu lệnh này cùng sử dụng toán tử == và trả lại giá trị false:
PHP:
a == b;a.equals(b);
Thật tuyệt với đối với các kiểu nguyên thủy, nhưng liệu sẽ thế nào nếu ta so sánh nội dung của các đối tượng? Toán tử == không thể làm việc này. Để so sánh nội dung của các đối tượng, chúng ta phải đè chồng phương thức equals() của lớp mà a là cá thể của lớp đó. Điều đó có nghĩa là bạn tạo ra một phương thức có cùng chữ ký chính xác như chữ ký của phương thức của một trong các lớp bậc trên (superclasses), nhưng bạn sẽ triển khai thực hiện phương thức này khác với phương thức của lớp bậc trên. Nếu làm như vậy, bạn có thể so sánh nội dung của hai đối tượng để xem liệu chúng có giống nhau không chứ không phải là chỉ kiểm tra xem liệu hai biến đó có trỏ tới cùng một cá thể không.
Hãy thử ví dụ này trong main(), và xem kết quả trên màn hình:
PHP:
Adult adult1 = new Adult();Adult adult2 = new Adult();
System.out.println(adult1 == adult2);System.out.println(adult1.equals(adult2));
Integer integer1 = new Integer(1);Integer integer2 = new Integer(1);
System.out.println(integer1 == integer2);System.out.println(integer1.equals(integer2));
0 nhận xét:
Đăng nhận xét