Wednesday, July 4, 2007

Tìm hiểu lập trình hướng đối tượng (OOP) - 2

Phần này ta tìm hiểu tiếp về các thành phần của lớp: con trỏ this, phương thức khởi tạo, thành phần tĩnh

Các thành viên chính của Lớp

Con trỏ this

Đây là thành viên đặc biệt của lớp, nó thể hiện chính bản thân của lớp đang chứa nó. Ví dụ trong lớp But, ta có thể sử dụng cú pháp this.mau để thể hiện thuộc tính mau của lớp bút

Phương thức tạo (Constructor)

Phương thức này được sử dụng để khởi tạo tất cả các thuộc tính của một lớp, phương thức này trùng tên với tên lớp và đặc biệt là không có kiểu trả về như những phương thức bình thường khác

Ví dụ:



public class But{


public But(String m, boolean t){


this.mau = m;


this.trangthai = t;


}


}



Thành viên tĩnh (static)


public class A{


private static String a1;


public static String a2;


public static void getSomeThing(){}


}




Thuộc tính tĩnh là một thuộc tính đặc biệt, nó có phạm vi trong toàn lớp định nghĩa bởi từ khóa static, tức là, với một thuộc tính bình thường, nó chỉ có thể thể hiện được khi ta khởi tạo một đối tượng là thể hiện của lớp đó, ví dụ lớp But ở trên, thuộc tính mau chỉ có thể được khởi tạo (cấp phát vùng nhớ, gán giá trị) khi ta khởi tạo một đối tượng butObj và thuộc tính mau chỉ có "phạm vi" trong đối tượng butObj, thuộc tính mau của butObj1 sẽ khác butObj2 (vùng nhớ được cấp phát khác nhau). Riêng thuộc tính a1,a2 sẽ khác thuộc tính mau, 2 thuộc tính này có "phạm vi" toàn lớp, nó không được truy xuất qua đối tượng mà trực tiếp qua lớp chứa nó: A.a2, khi run lớp A mặc dù chưa có đối tượng nào được khởi tạo nhưng a1, a2 đã được khởi tạo, cấp phát vùng nhớ

Xét tiếp đoạn ví dụ sau



public class A{


private static byte a1 = 1;


public void changeStatic(byte a){


A.a1 += a;


System.out.print(A.a1);//không quan tâm nhiều câu lệnh này, nó chỉ làm nhiệm vụ in a1 ra


}


}


Khi run, lớp A được khởi tạo, thuộc tính tĩnh a1 sẽ có 1 vùng nhớ và được gán giá trị là 1
Ta khởi tạo 2 đối tượng của lớp A và thực hiện gọi phương thức changeStatic, phương thức này làm nhiệm vụ đưa vào một số a, cộng số này vào a1 sau đó in a1 ra.


A obj1 = new A();
A obj2 = new A();
obj1.changeStatic(2);
obj2.changeStatic(3);
obj1.changeStatic(1);



Khi đó kết quả in ra của đoạn trên là


3 // 1 + 2
6 // 3 + 3
7 // 6 + 1

No comments:

Post a Comment