Trong lập trình Java, constructor là một khái niệm quan trọng, đóng vai trò như một phương thức đặc biệt giúp khởi tạo các đối tượng của lớp. Bài viết này sẽ trình bày chi tiết về constructor, cách thức hoạt động của constructor overloading, và copy-constructor, cùng với ví dụ minh họa cho từng khái niệm.
1. Constructor là gì?
Constructor (hàm khởi tạo) trong Java là một phương thức đặc biệt được gọi khi một đối tượng của lớp được tạo ra. Nó có tên giống với tên lớp và không có kiểu trả về (return type). Constructor được sử dụng để khởi tạo các thuộc tính của đối tượng hoặc thực hiện các thao tác cần thiết khác khi một đối tượng được tạo.
1.1 Đặc điểm của Constructor
- Tên của constructor phải giống với tên của lớp.
- Không có kiểu trả về.
- Có thể có tham số hoặc không có tham số (constructor mặc định).
- Có thể được định nghĩa nhiều lần với các tham số khác nhau (constructor overloading).
1.2 Ví dụ về Constructor
class Car {
String model;
int year;
// Constructor không có tham số
Car() {
model = "Unknown";
year = 0;
}
// Constructor có tham số
Car(String model, int year) {
this.model = model;
this.year = year;
}
void displayInfo() {
System.out.println("Model: " + model + ", Year: " + year);
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car(); // Gọi constructor không có tham số
car1.displayInfo(); // Model: Unknown, Year: 0
Car car2 = new Car("Toyota", 2022); // Gọi constructor có tham số
car2.displayInfo(); // Model: Toyota, Year: 2022
}
}
2. Constructor Overloading
Constructor overloading là quá trình định nghĩa nhiều constructor trong cùng một lớp với các tham số khác nhau. Điều này cho phép bạn tạo ra các đối tượng với các thuộc tính khác nhau một cách linh hoạt.
2.1 Ví dụ về Constructor Overloading
class Rectangle {
int width;
int height;
// Constructor không có tham số
Rectangle() {
width = 0;
height = 0;
}
// Constructor có một tham số
Rectangle(int side) {
width = side;
height = side;
}
// Constructor có hai tham số
Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
void displayDimensions() {
System.out.println("Width: " + width + ", Height: " + height);
}
}
public class Main {
public static void main(String[] args) {
Rectangle rect1 = new Rectangle(); // Gọi constructor không có tham số
rect1.displayDimensions(); // Width: 0, Height: 0
Rectangle rect2 = new Rectangle(5); // Gọi constructor có một tham số
rect2.displayDimensions(); // Width: 5, Height: 5
Rectangle rect3 = new Rectangle(5, 10); // Gọi constructor có hai tham số
rect3.displayDimensions(); // Width: 5, Height: 10
}
}
3. Copy-Constructor
Copy-constructor là một kiểu constructor đặc biệt được sử dụng để tạo ra một đối tượng mới bằng cách sao chép giá trị của một đối tượng đã tồn tại. Trong Java, copy-constructor không được hỗ trợ trực tiếp như trong C++, nhưng bạn có thể tự định nghĩa nó bằng cách tạo một constructor nhận đối tượng của chính lớp đó làm tham số.
3.1 Ví dụ về Copy-Constructor
class Person {
String name;
int age;
// Constructor có tham số
Person(String name, int age) {
this.name = name;
this.age = age;
}
// Copy-constructor
Person(Person person) {
this.name = person.name;
this.age = person.age;
}
void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person("Alice", 30);
person1.displayInfo(); // Name: Alice, Age: 30
// Sử dụng copy-constructor để tạo person2
Person person2 = new Person(person1);
person2.displayInfo(); // Name: Alice, Age: 30
}
}
Kết luận
Constructor, constructor overloading và copy-constructor là những khái niệm quan trọng trong lập trình Java. Constructor cho phép bạn khởi tạo đối tượng, constructor overloading giúp tạo ra các đối tượng với các thuộc tính khác nhau, và copy-constructor cho phép bạn sao chép giá trị của một đối tượng. Hiểu rõ về các khái niệm này sẽ giúp bạn thiết kế các lớp trong Java một cách hiệu quả hơn.