Lớp (Class) trong Java

1. Khái niệm

Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm dữ liệu của  đối tượng (fields hay properties) và các phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp.

Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance).

2. Khai báo/định nghĩa lớp

class <ClassName>

{

<kiểu dữ liệu> <field_1>;

<kiểu dữ liệu> <field_2>;

constructor

method_1

method_2

}

class: là từ khóa của java ClassName: là tên chúng ta đặt cho lớp

field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp.

constructor: là sự xây dựng, khởi tạo đối tượng lớp. method_1, method_2: là các phương thức/hàm thể hiện các thao tác xử lý, tác động lên các thành phần dữ liệu của lớp.

3. Tạo đối tượng của lớp

ClassName objectName = new ClassName();

4. Thuộc tính của lớp

Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp được khai báo bên trong lớp như sau: class <ClassName>

{

// khai báo những thuộc tính của lớp <tiền tố> <kiểu dữ liệu> fieldl;

//…

}

Để xác định quyền truy xuất của các đối tượng khác đối với vùng dữ liệu của lớp người ta thường dùng 3 tiền tố sau:

  • public: có thể truy xuất từ tất cả các đối tượng khác
  • private: một lớp không thể truy xuất vùng private của 1 lớp khác.
  • protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đó        và        những  lớp       dẫn xuất                 từ   lớp đó truy cập đến.


// so luong so cua xe may: 3, 4 so protected int so;

// sobanhxe là biến tĩnh có giá trị là 2 trong tất cả // các thể hiện tạo ra từ lớp xemay

}

Thuộc tính “nhasx”, “model”có thể được truy cập đến từ tất cả các đối tượng khác.

Thuộc tính “chiphisx” chỉ có thể truy cập được từ các đối tượng có kiểu “xemay”

Thuộc tính “thoigiansx”, so có thể truy cập được từ các đối tượng có kiểu “xemay” và các đối tượng của các lớp con dẫn xuất từ lớp “xemay”

Lưu ý: Thông thường để an toàn cho vùng dữ liệu của các đối tượng người ta tránh dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng dữ liệu của một lớp từ các phương thức bên ngoài lớp đó.

5. Hàm – Phương thức lớp (Method)

Hàm hay phương thức (method) trong Java là khối lệnh thực hiện các chức năng, các hành vi xử lý của lớp lên vùng dữ liệu.

Khai báo phương thức:

<Tiền tố> <kiểu trả về> <Tênphương thức> (<danh sách đối số>)

{

<khối lệnh>;

}

Để xác định quyền truy xuất của các đối tượng khác đối với các phương thức của lớp người ta thường dùng các tiền tố sau:

  • public: phương  thức  có thể  truy cập được  từ  bên ngoài lớp khai báo.
  • protected: có thể truy cập được từ lớp khai báo và những lớp dẫn xuất từ nó.
  • private: chỉ được truy cập bên trong bản thân lớp khai báo.
  • static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa là phương thức đó có thể được thực hiện kể cả khi không có đối tượng của lớp chứa phương thức đó.
  • final: phương thức có tiền tố này không được khai báo chồng ớ các lớp dẫn xuất.
  • abstract: phương thức không cần cài đặt (không có phần source code), sẽ được hiện thực trong các lớp dẫn xuất từ lớp này.
  • synchoronized: dùng để ngăn các tác động của các đối tượng khác lên đối tượng đang xét trong khi đang đồng bộ hóa. Dùng trong lập trình miltithreads.

<kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp.

<Tênphương thức>: đặt theo qui ước giống tên biến.

<danh sách thông số>: có thể rỗng

Lưu ý:

Thông thường trong một lớp các phương thức nên được khai báo dùng từ khóa public, khác với vùng dữ liệu thường là dùng tiền tố private vì mục đích an toàn.

6. Khởi tạo một đối tượng (Constructor)

Contructor thật ra là một lo ại phương thức đặc biệt của lớp. Constructor dùng gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng để khởi gán những giá trị măc định. Các constructor không có giá trị trả về, và có thể có tham số hoặc không có tham số.

Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new.

Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor mặc định (default constructor). Những thuộc tính, biến      của  lớp  sẽ  được  khởi  tạo  bởi  các giá   trị  mặc định (số: thường là giá trị 0, kiểu luận lý là giá trị false, kiểu đối tượng giá trị null, …)

Lưu ý: thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương trình chúng ta nên khai báo một constructor cho lớp.

Ví dụ:

public class xemay {

//…

public xemay() {}

public xemay(String snhasx, String smodel, fchiphisx, int ithoigiansx, int i_so);

{

nhasx = snhasx; model = smodel; chiphisx = fchiphisx; thoigiansx = ithoigiansx; so = iso;

// hoặc

// this.nhasx = snhasx;

// this.model = smodel;

// this.chiphisx = fchiphisx;

// this.thoigiansx = ithoigiansx;

// this.so = iso;

}

}

7. Biến this

Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ java. Một class trong Java luôn tồn tại một biến this, biến this được sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó.

Ví dụ:

<tiền tố> class A {

<tiền tố> int <field_1>;

<tiền tố> String <field_2>;

// Contractor của lớp A public A(intpar_1, Stringpar_2)

{

this.fieldi = pari; this.field_2 = par_2;

}

<tiền tố> <kiểu trả về> <method_1>() {

//…

}

<tiền tố> <kiểu trả về> <method_2>() {

this.method_1()

//…

}

8. Khai báo chồng phương thức (overloading method)

Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method).

Ví dụ:

public class xemay {     // khai báo fields …

public float tinhgiaban()

{ return 2 * chiphisx;

}

public float tinhgiaban(float huehong)

{ return (2 * chiphisx + huehong);

}

}