I. XÂY DỰNG LỚP
Khi định nghĩa một lớp, bạn chỉ ra thuộc tính mà nó chứa được thể hiện bằng biến (Member Variable) và hành vi được thể hiện bởi hàm (Method)
Các biến định nghĩa bên trong một lớp gọi là các biến thành viên (Member Variables). Mã lệnh chứa trong các phương thức (Method). Các phương thức và biến định nghĩa trong lớp gọi chung là thành phần của lớp. Trong hầu hết các lớp, các biến thể hiện được truy cập bởi các phương thức định nghĩa trong lớp đó. Vì vậy, chính các phương thức quyết định dữ liệu của lớp có thể dùng như thế nào. Lớp định nghĩa một kiểu dữ liệu mới, dùng để tạo các đối tượng thuộc kiểu đó.
Dạng đầy đủ của một định nghĩa lớp như sau :
[public] : Lớp được truy xuất chung cho
các Package khác, mặc định chỉ có các đoạn mã trong cùng một gói
mới có quyền truy xuất nó
[abstract] : Lớp trừu tượng, không thể khởi tạo
class ClassName : Tên lớp
[extends SuperClass] : Kế thừa lớp cha SuperClass
[implements Interfaces] : Giao diện được cài đặt bởi Class
{ //Member Variables Declarations :Khai báo các biến
// Methods Declarations : Khai báo các phương thức
}
[abstract] : Lớp trừu tượng, không thể khởi tạo
class ClassName : Tên lớp
[extends SuperClass] : Kế thừa lớp cha SuperClass
[implements Interfaces] : Giao diện được cài đặt bởi Class
{ //Member Variables Declarations :Khai báo các biến
// Methods Declarations : Khai báo các phương thức
}
Ví dụ : Tạo một lớp Box đơn giản với ba biến :
width, height, depth
/* Định nghĩa lớp
*/
class Box {
double width;
double height;
double depth; }
------------------
II. TẠO ĐỐI TƯỢNG
1. Khai báo đối tượng
Để có được các đối tượng của một lớp phải qua hai giai đoạn :
ClassName ObjectName; Ví dụ : Box myBoxw
Khai báo biến myBox có kiểu lớp Box. Khai báo này thực ra không cấp phát ký ức đủ chứa đối tượng thuộc lớp Box, mà chỉ tạo ra quy chiếu trỏ đến đối tượng Box. Sau câu lệnh này, quy chiếu myBox xuất hiện trên ký ức chứa giá trị null chỉ ra rằng nó chưa trỏ đến một đối tượng thực tế nào Khác với câu lệnh khai báo biến kiểu sơ cấp là dành chỗ trên ký ức đủ chứa một trị thuộc kiểu đó : Ví dụ : int i;
Sau đó, để thực sự tạo ra một đối tượng và gán địa chỉ của đối tượng cho biến này, dùng toán tử newwSau câu lệnh này, biến nguyên i hình thành.
ObjectName = new ClassName(); Ví dụ : myBox = new Box();
Có thể kết hợp cả hai bước trên vào một câu lệnh :w
ClassName ObjectName = new ClassName(); Ví dụ : Box myBox = new Box();
Box myBox2 = myBox; myBox2 tham chiếu đến cùng đối tượng mà myBox tham chiếu
2. Cách truy xuất thành phần của lớp
Biến khai báo trong định nghĩa lớp gồm có hai loại :w
- Biến đối tượng (Instance Variable hay Object Variable) : chỉ thuộc tính đối tượng, khi truy xuất phải khởi tạo đối tượng
+ Cách khai báo biến đối tượng :
Type InstanceVar;
+ Cách truy cập biến đối tượng :
ObjectName.InstanceVar
- Biến lớp (Class Variable) : về bản chất là biến toàn cục, là biến tĩnh được tạo lập một lần cùng với lớp, dùng chung cho mọi đối tượng thuộc lớp, khi truy xuất không cần khởi tạo đối tượng, để trao đổi thông tin của các đối tượng cùng lớp
+ Cách khai báo biến lớp :
static Type ClassVar;
+ Cách truy cập biến lớp :
ClassName.ClassVar
Hàm khai báo trong định nghĩa lớp gồm có hai loại :w
- Hàm đối tượng (Object Method) : cách truy xuất hàm đối tượng như biến đối tượng
ObjectName.ObjectMethod(Parameter-List) - Hàm lớp (Class Method) : thông thường một thành phần của lớp chỉ truy xuất trong sự liên kết với một đối tượng thuộc lớp của nó. Tuy nhiên, có thể tạo ra một thành phần mà có thể dùng một độc lập một mình, không cần tham chiếu đến một đối tượng cụ thể, có thể được truy xuất trước khi bất kỳ đối tượng nào của lớp đó được tạo ra, bằng cách đặt trước khai báo của nó từ khoá static. Cách truy xuất hàm lớp :
ClassName.ClassMethod(Parameter-List)
Các hàm toán học của lớp Math trong Package Java.Lang là hàm lớp nên khi gọi không cần phải khởi tạo đối tượng
Ví dụ : double a = Math.sqrt(453.28);
Ví dụ 1: class BaiTho {
static int i; // Biến lớp
String s; // Biến đối tượng
BaiTho(String ss) { // Hàm khởi tạo
s = ss;
i++;
}
void content( ) {
System.out.println(s);
}
}
class UngDung {
public static void main(String args[]){
BaiTho p1 = new BaiTho(“Chi co thuyen moi hieu”);
BaiTho p2 = new BaiTho(“Bien menh mong nhuong nao”);
p1.content();
p2.content();
System.out.println(“So cau tho la : “+BaiTho.i);
}
}
Khi tạo đối tượng p1, p2 bởi toán tử new, hàm dựng BaiTho() được gọi, và i tăng lên 1
Ví dụ 2:
class BaiTho2 {
static int i;
String s;
BaiTho2(String ss) { // Hàm khởi tạo
s = ss; i++;
}
static int number() { // Hàm lớp
return i;
}
String content() { // Hàm đối tượng
return s;
}
}
class UngDung2 {
public static void main (String args[]) {
System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”);
BaiTho2.p1 = new BaiTho2(“Chi co thuyen moi hieu”);
BaiTho2.p2 = new BaiTho2(“Bien menh mong nhuong nao”);
System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”);
System.out.println(“Cau tho\n“+p1.content().toUpperCase()+”\nco” +
p1.content().length() +” ky tu”);
System.out.println(“Tu \”tinh yeu\“ bat dau sau ky tu thu“+
p2.content().indexOf(“tinh yeu”)+” trong cau\n”+
p2.content().toUpperCase());
}
}
Gọi hàm lớp BaiTho2.number() lúc chưa gọi hàm dựng BaiTho2 để khởi tạo đối tượng sẽ cho trị 0
p1.content() trả về một đối tượng String
/* Định nghĩa lớp
*/
class Box {
double width;
double height;
double depth; }
------------------
II. TẠO ĐỐI TƯỢNG
1. Khai báo đối tượng
Để có được các đối tượng của một lớp phải qua hai giai đoạn :
ClassName ObjectName; Ví dụ : Box myBoxw
Khai báo biến myBox có kiểu lớp Box. Khai báo này thực ra không cấp phát ký ức đủ chứa đối tượng thuộc lớp Box, mà chỉ tạo ra quy chiếu trỏ đến đối tượng Box. Sau câu lệnh này, quy chiếu myBox xuất hiện trên ký ức chứa giá trị null chỉ ra rằng nó chưa trỏ đến một đối tượng thực tế nào Khác với câu lệnh khai báo biến kiểu sơ cấp là dành chỗ trên ký ức đủ chứa một trị thuộc kiểu đó : Ví dụ : int i;
Sau đó, để thực sự tạo ra một đối tượng và gán địa chỉ của đối tượng cho biến này, dùng toán tử newwSau câu lệnh này, biến nguyên i hình thành.
ObjectName = new ClassName(); Ví dụ : myBox = new Box();
Có thể kết hợp cả hai bước trên vào một câu lệnh :w
ClassName ObjectName = new ClassName(); Ví dụ : Box myBox = new Box();
Box myBox2 = myBox; myBox2 tham chiếu đến cùng đối tượng mà myBox tham chiếu
2. Cách truy xuất thành phần của lớp
Biến khai báo trong định nghĩa lớp gồm có hai loại :w
- Biến đối tượng (Instance Variable hay Object Variable) : chỉ thuộc tính đối tượng, khi truy xuất phải khởi tạo đối tượng
+ Cách khai báo biến đối tượng :
Type InstanceVar;
+ Cách truy cập biến đối tượng :
ObjectName.InstanceVar
- Biến lớp (Class Variable) : về bản chất là biến toàn cục, là biến tĩnh được tạo lập một lần cùng với lớp, dùng chung cho mọi đối tượng thuộc lớp, khi truy xuất không cần khởi tạo đối tượng, để trao đổi thông tin của các đối tượng cùng lớp
+ Cách khai báo biến lớp :
static Type ClassVar;
+ Cách truy cập biến lớp :
ClassName.ClassVar
Hàm khai báo trong định nghĩa lớp gồm có hai loại :w
- Hàm đối tượng (Object Method) : cách truy xuất hàm đối tượng như biến đối tượng
ObjectName.ObjectMethod(Parameter-List) - Hàm lớp (Class Method) : thông thường một thành phần của lớp chỉ truy xuất trong sự liên kết với một đối tượng thuộc lớp của nó. Tuy nhiên, có thể tạo ra một thành phần mà có thể dùng một độc lập một mình, không cần tham chiếu đến một đối tượng cụ thể, có thể được truy xuất trước khi bất kỳ đối tượng nào của lớp đó được tạo ra, bằng cách đặt trước khai báo của nó từ khoá static. Cách truy xuất hàm lớp :
ClassName.ClassMethod(Parameter-List)
Các hàm toán học của lớp Math trong Package Java.Lang là hàm lớp nên khi gọi không cần phải khởi tạo đối tượng
Ví dụ : double a = Math.sqrt(453.28);
Ví dụ 1: class BaiTho {
static int i; // Biến lớp
String s; // Biến đối tượng
BaiTho(String ss) { // Hàm khởi tạo
s = ss;
i++;
}
void content( ) {
System.out.println(s);
}
}
class UngDung {
public static void main(String args[]){
BaiTho p1 = new BaiTho(“Chi co thuyen moi hieu”);
BaiTho p2 = new BaiTho(“Bien menh mong nhuong nao”);
p1.content();
p2.content();
System.out.println(“So cau tho la : “+BaiTho.i);
}
}
Khi tạo đối tượng p1, p2 bởi toán tử new, hàm dựng BaiTho() được gọi, và i tăng lên 1
Ví dụ 2:
class BaiTho2 {
static int i;
String s;
BaiTho2(String ss) { // Hàm khởi tạo
s = ss; i++;
}
static int number() { // Hàm lớp
return i;
}
String content() { // Hàm đối tượng
return s;
}
}
class UngDung2 {
public static void main (String args[]) {
System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”);
BaiTho2.p1 = new BaiTho2(“Chi co thuyen moi hieu”);
BaiTho2.p2 = new BaiTho2(“Bien menh mong nhuong nao”);
System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”);
System.out.println(“Cau tho\n“+p1.content().toUpperCase()+”\nco” +
p1.content().length() +” ky tu”);
System.out.println(“Tu \”tinh yeu\“ bat dau sau ky tu thu“+
p2.content().indexOf(“tinh yeu”)+” trong cau\n”+
p2.content().toUpperCase());
}
}
Gọi hàm lớp BaiTho2.number() lúc chưa gọi hàm dựng BaiTho2 để khởi tạo đối tượng sẽ cho trị 0
p1.content() trả về một đối tượng String
Đăng nhận xét