1. Khái niệm về lớp (Class)
Lớp trong Java là một bản thiết kế hoặc khuôn mẫu cho các đối tượng. Mỗi đối tượng được tạo ra từ một lớp, mang các thuộc tính và phương thức được định nghĩa trong lớp đó.
Cú pháp khai báo lớp trong Java:
public class TênLớp {
// Thuộc tính (fields)
int x;
String y;
// Phương thức (method)
public void hienThi() {
System.out.println("Giá trị x là: " + x);
System.out.println("Giá trị y là: " + y);
}
}
2. Cấu trúc (thành phần) của lớp trong Java
<accessmodifier> class TenLop {
// Các thuộc tính (fields)
private dataType thuocTinh1;
private dataType thuocTinh2;
private dataType thuocTinh3;
// Phương thức khởi tạo không tham số
public TenLop() {
// Khởi tạo các giá trị mặc định cho thuộc tính nếu cần
}
// Phương thức khởi tạo có tham số
public TenLop(dataType thamSo1, dataType thamSo2, ...) {
this.thuocTinh1 = thamSo1;
this.thuocTinh2 = thamSo2;
// Gán giá trị cho các thuộc tính từ tham số truyền vào
}
// Phương thức Getter để lấy giá trị của thuộc tính
public dataType getThuocTinh1() {
return thuocTinh1;
}
// Phương thức Setter để gán giá trị cho thuộc tính
public void setThuocTinh1(dataType thuocTinh1) {
this.thuocTinh1 = thuocTinh1;
}
// Các phương thức Getter, Setter khác cho các thuộc tính còn lại
public dataType getThuocTinh2() {
return thuocTinh2;
}
public void setThuocTinh2(dataType thuocTinh2) {
this.thuocTinh2 = thuocTinh2;
}
// Phương thức khác nếu cần (ví dụ, phương thức xử lý dữ liệu)
public void hienThiThongTin() {
// Hiển thị thông tin của các thuộc tính
System.out.println("Thuộc tính 1: " + thuocTinh1);
System.out.println("Thuộc tính 2: " + thuocTinh2);
}
// Phương thức main để kiểm thử lớp (nếu cần)
public static void main(String[] args) {
// Khởi tạo đối tượng lớp
TenLop doiTuong = new TenLop("Giá trị 1", "Giá trị 2");
// Gọi phương thức
doiTuong.hienThiThongTin();
}
}
Giải thích các phần trong cấu trúc lớp:
- Access Modifier:
- Xác định phạm vi truy cập của lớp và các thành viên của lớp. Ví dụ,
public
có thể truy cập từ bất kỳ đâu,private
chỉ có thể truy cập trong lớp đó.
- Tên Lớp (Class Name):
- Tên lớp theo quy ước sẽ bắt đầu bằng chữ cái viết hoa và có ý nghĩa mô tả đối tượng hoặc thực thể mà lớp đó đại diện.
- Các Thuộc Tính (Attributes/Fields):
- Đây là các biến lưu trữ thông tin liên quan đến đối tượng của lớp. Chúng thường được khai báo với mức độ truy cập
private
để đảm bảo tính đóng gói (encapsulation). - Các thuộc tính có thể là các kiểu dữ liệu nguyên thủy (
int
,double
,boolean
,…) hoặc các kiểu dữ liệu tham chiếu (chẳng hạnString
,Object
,…).
- Phương Thức Khởi Tạo (Constructors):
- Phương thức khởi tạo là một phương thức đặc biệt được gọi khi tạo đối tượng của lớp. Một lớp có thể có không có, có một hoặc có nhiều phương thức khởi tạo.
- Constructor không có kiểu trả về và tên của nó trùng với tên lớp.
- Constructor không tham số: Dùng để khởi tạo đối tượng với giá trị mặc định.
- Constructor có tham số: Dùng để khởi tạo đối tượng với các giá trị cụ thể được truyền vào.
- Phương Thức Getter và Setter:
- Getter: Dùng để lấy giá trị của các thuộc tính.
- Setter: Dùng để gán giá trị cho các thuộc tính.
- Cả getter và setter giúp kiểm soát việc truy cập và thay đổi các thuộc tính của đối tượng, bảo vệ tính toàn vẹn của dữ liệu.
- Các Phương Thức Khác:
- Đây là các phương thức thêm mà lớp có thể cung cấp để thực hiện các hành động hoặc xử lý dữ liệu liên quan đến đối tượng.
- Ví dụ:
hienThiThongTin()
là phương thức dùng để hiển thị thông tin thuộc tính của đối tượng.
Ví dụ minh họa:
Giả sử bạn muốn tạo một lớp SinhVien
với các thuộc tính ten
, tuoi
, diem
, bạn có thể cấu trúc như sau:
public class SinhVien {
// Các thuộc tính
private String ten;
private int tuoi;
private double diem;
// Phương thức khởi tạo không tham số
public SinhVien() {
this.ten = "Chưa xác định";
this.tuoi = 0;
this.diem = 0.0;
}
// Phương thức khởi tạo có tham số
public SinhVien(String ten, int tuoi, double diem) {
this.ten = ten;
this.tuoi = tuoi;
this.diem = diem;
}
// Getter và Setter
public String getTen() {
return ten;
}
public void setTen(String ten) {
this.ten = ten;
}
public int getTuoi() {
return tuoi;
}
public void setTuoi(int tuoi) {
this.tuoi = tuoi;
}
public double getDiem() {
return diem;
}
public void setDiem(double diem) {
this.diem = diem;
}
// Phương thức hiển thị thông tin sinh viên
public void hienThiThongTin() {
System.out.println("Tên: " + ten);
System.out.println("Tuổi: " + tuoi);
System.out.println("Điểm: " + diem);
}
public static void main(String[] args) {
// Khởi tạo đối tượng sinh viên
SinhVien sv = new SinhVien("Nguyen A", 20, 8.5);
// Gọi phương thức hiển thị thông tin
sv.hienThiThongTin();
}
}
Kết quả khi chạy chương trình:
Tên: Nguyen A
Tuổi: 20
Điểm: 8.5
3. Tạo đối tượng từ lớp (Object Creation)
Để tạo đối tượng từ lớp, bạn sử dụng từ khóa new
:
SinhVien sv1 = new SinhVien("Nguyen A", 20);
Ở đây, sv1
là đối tượng của lớp SinhVien
với tên “Nguyen A” và tuổi 20.
4. Các thành phần trong lớp
- Access Modifiers (Chế độ truy cập): Xác định phạm vi truy cập của lớp, thuộc tính, và phương thức. Các access modifiers phổ biến trong Java là:
public
: có thể truy cập từ bất kỳ đâu.private
: chỉ có thể truy cập trong lớp đó.protected
: có thể truy cập trong lớp, trong các lớp con và trong cùng package.default
: không chỉ định gì, có thể truy cập trong cùng package.- Static (Tĩnh): Các thành viên của lớp (thuộc tính và phương thức) được khai báo là
static
sẽ thuộc về lớp thay vì thuộc về đối tượng. Phương thứcmain()
là một ví dụ về phương thức static, được gọi mà không cần tạo đối tượng.
5. Ví dụ đầy đủ về lớp trong Java:
public class Car {
// Thuộc tính
String color;
String model;
int year;
// Constructor
public Car(String color, String model, int year) {
this.color = color;
this.model = model;
this.year = year;
}
// Phương thức
public void displayDetails() {
System.out.println("Màu sắc: " + color);
System.out.println("Model: " + model);
System.out.println("Năm sản xuất: " + year);
}
// Phương thức main để chạy chương trình
public static void main(String[] args) {
// Tạo đối tượng
Car car1 = new Car("Đỏ", "Toyota", 2022);
// Gọi phương thức displayDetails
car1.displayDetails();
}
}
Kết quả khi chạy chương trình:
Màu sắc: Đỏ
Model: Toyota
Năm sản xuất: 2022
6. Kết luận
Getter và Setter giúp truy cập và thay đổi các thuộc tính một cách an toàn.
Lớp là yếu tố cơ bản trong lập trình hướng đối tượng.
Lớp đóng vai trò như bản thiết kế cho các đối tượng, với các thuộc tính và phương thức.
Java hỗ trợ mạnh mẽ các nguyên lý của OOP như đóng gói, kế thừa và đa hình thông qua các lớp.
Lớp trong Java có cấu trúc gồm các thuộc tính, phương thức khởi tạo, getter và setter, và các phương thức khác (nếu cần thiết).
Access modifier giúp kiểm soát phạm vi truy cập của các thành phần trong lớp.
Phương thức khởi tạo giúp tạo đối tượng và khởi tạo các giá trị ban đầu cho thuộc tính.