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.
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.
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 } }
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.
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 } }
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ố.
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 } }
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.