Constructor trong Java là gì và bạn sử dụng nó như thế nào?

Constructor trong Java là gì và bạn sử dụng nó như thế nào?

Trong lập trình hướng đối tượng, một hàm tạo là một hàm đặc biệt mà bạn gọi để tạo một đối tượng. Các trình xây dựng có một số tính năng độc đáo cho phép chúng hoạt động.





Trong Java, bạn đặt tên một phương thức khởi tạo sau lớp của nó. Hàm tạo là một phương thức, được định nghĩa trong lớp mà nó áp dụng. Các hàm tạo Java có thể sử dụng tính năng nạp chồng để cung cấp các hành vi thay thế. Các trình xây dựng trong Java cũng có thể sử dụng tính kế thừa để sử dụng lại mã.





Tại sao bạn vẫn cần người xây dựng?

Các trình xây dựng là trụ cột chính của lập trình hướng đối tượng và Java không phải là ngoại lệ. Ví dụ này cho thấy cách bạn có thể xác định một lớp Circle cơ bản với một thuộc tính dữ liệu và một phương thức:





public class Circle {
public double radius;
public double area() { return 3.14159 * radius * radius; }
}

Sau đó, bạn có thể tạo một phiên bản của lớp này và tương tác với nó:

Circle c = new Circle();
c.radius = 2;
System.out.println(c.area()); // 12.56636

Nhưng điều này kém thuận tiện và mạnh mẽ hơn nó có thể. Đó là phương pháp hướng đối tượng tốt để đóng gói dữ liệu, bảo vệ dữ liệu khỏi truy cập trái phép:



public class Circle {
private double radius;
public double area() { return 3.14159 * radius * radius; }
public void setRadius(double r) { radius = r; }
}

Bây giờ mã gọi điện có thể sử dụng setRadius và không phải lo lắng về chi tiết triển khai của nó:

làm cách nào để đồng bộ hóa các tài khoản email của tôi
Circle c = new Circle();
c.setRadius(2);

Trình tạo cung cấp một cách thậm chí còn tốt hơn để cung cấp dữ liệu cho một đối tượng khi bạn tạo nó. Chúng rất thường được sử dụng để khởi tạo các thuộc tính, chẳng hạn như bán kính ở đây.





Ví dụ về các trình xây dựng đơn giản

Hàm tạo cơ bản nhất là một hàm không có đối số, không có tác dụng gì:

public class Circle {
public Circle() {}
}

Xem thêm: Tìm hiểu cách tạo lớp học trong Java





Nếu bạn không xác định một phương thức khởi tạo, Java sẽ cung cấp một phương thức khởi tạo mặc định hoạt động theo cùng một cách.

Lưu ý một số điều:

  1. Tên của hàm tạo trùng với tên lớp.
  2. Hàm tạo này sử dụng công cộng công cụ sửa đổi truy cập, vì vậy bất kỳ mã nào khác đều có thể gọi nó.
  3. Hàm tạo không bao gồm kiểu trả về. Không giống như các phương thức khác, các hàm tạo không thể trả về một giá trị.

Các trình xây dựng thường thực hiện một số kiểu khởi tạo. Lưu ý rằng đoạn mã trên không khởi tạo giá trị của radius. Trong trường hợp này, ngôn ngữ sẽ tự động đặt nó thành 0. Lớp này mong đợi một người dùng sử dụng setRadius () . Để sử dụng mặc định hữu ích hơn 0, bạn có thể gán nó trong hàm tạo:

public class Circle {
public Circle() { radius = 1; }
}

Các vòng kết nối được tạo bằng lớp này ít nhất bây giờ sẽ có một khu vực thực tế! Người gọi vẫn có thể sử dụng setRadius () để cung cấp bán kính khác 1. Nhưng hàm tạo thậm chí có thể thân thiện hơn:

public class Circle {
public Circle(double r) { radius = r; }
}

Giờ đây, bạn có thể tạo các vòng tròn với bán kính cụ thể ngay từ khi mới sinh:

cách ẩn trạng thái trực tuyến trên whatsapp
Circle c = new Circle(2);
System.out.println(c.area()); // 12.56636

Đây là cách sử dụng rất phổ biến cho các constructor. Bạn sẽ thường sử dụng chúng để khởi tạo các biến thành giá trị tham số.

Nạp chồng khối xây dựng

Bạn có thể chỉ định nhiều hơn một hàm tạo trong một định nghĩa lớp:

public Circle() { radius = 1; }
public Circle(double r) { radius = r; }

Điều này cung cấp cho mã gọi một sự lựa chọn về cách xây dựng các đối tượng:

Circle c1 = new Circle(2);
Circle c2 = new Circle();
System.out.println(c1.area() + ', ' + c2.area()); // 12.56636, 3.14159

Với một Vòng tròn phức tạp hơn một chút, bạn có thể khám phá các hàm tạo thú vị hơn. Phiên bản này lưu trữ vị trí của nó:

public class Circle {
public double x, y, radius;
public Circle() { radius = r; }
public Circle(double r) { radius = r; }
public Circle(double x, double y, double r) {
this.x = x; this.y = y; radius = r;
}

public double area() { return 3.14159 * radius * radius; }
}

Giờ đây, bạn có thể tạo một Hình tròn không có đối số, một bán kính duy nhất hoặc tọa độ x và y dọc theo bán kính. Đây là cùng một kiểu nạp chồng mà Java hỗ trợ cho bất kỳ phương thức nào.

Constructor Chaining

Làm thế nào về việc tạo một Vòng kết nối, dựa trên một Vòng kết nối khác? Điều này sẽ cung cấp cho chúng tôi khả năng sao chép Vòng kết nối một cách dễ dàng. Quan sát khối sau:

public Circle(Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}

Điều này sẽ hoạt động, nhưng nó lặp lại một số mã không cần thiết. Vì lớp Circle đã có một hàm tạo xử lý các thuộc tính riêng lẻ, thay vào đó bạn có thể gọi hàm tạo đó bằng cách sử dụng cái này từ khóa:

public Circle(Circle c) {
this(c.x, c.y, c.radius);
}

Đây là một dạng của chuỗi hàm tạo, gọi một hàm tạo này từ một hàm tạo khác. Nó sử dụng ít mã hơn và giúp tập trung hóa một hoạt động hơn là sao chép nó.

Gọi hàm tạo cha

Dạng khác của chuỗi phương thức khởi tạo xảy ra khi một phương thức khởi tạo gọi một phương thức khởi tạo của lớp cha của nó. Điều này có thể là rõ ràng hoặc ẩn. Để gọi một hàm tạo cha một cách rõ ràng, hãy sử dụng siêu từ khóa:

super(x, y);

Hãy tưởng tượng một lớp Hình dạng đóng vai trò là lớp cha của Vòng kết nối:

public class Shape {
double x, y;
public Shape(double _x, double _y) { x = _x; y = _y; }
}

Nó xử lý vị trí chung cho tất cả các hình dạng vì đây là chức năng mà tất cả chúng đều chia sẻ. Giờ đây, lớp Circle có thể ủy quyền xử lý vị trí cho lớp cha của nó:

public class Circle extends Shape {
double radius;
public Circle(double r) { super(0, 0); radius = r; }
public Circle(double x, double y, double r) {
super(x, y);
radius = r;
}
}

Xây dựng lớp siêu lớp là một khía cạnh rất quan trọng của kế thừa trong Java . Ngôn ngữ thực thi nó theo mặc định nếu bạn không gọi một cách rõ ràng siêu trong các hàm tạo của bạn.

Truy cập Modifier trên Constructors

Trình tạo có thể bao gồm một công cụ sửa đổi truy cập trong chữ ký của họ. Giống như các phương thức khác, điều này xác định loại người gọi nào có thể truy cập phương thức khởi tạo:

public class Test {
private static Test uniqueInstance = new Test();
private Test() { }
public static Test getInstance() {
return uniqueInstance;
}
}

Đây là một ví dụ phức tạp hơn, vì vậy hãy cẩn thận để hiểu nó:

  • Lớp không trừu tượng, vì vậy có thể khởi tạo từ nó.
  • Hàm tạo là private nên chỉ bản thân lớp này mới có thể tạo một thể hiện mới.
  • Thông qua một thuộc tính và phương thức static, lớp hiển thị một thể hiện duy nhất, duy nhất của chính nó cho người gọi.

Sử dụng hàm tạo trong Java để tạo đối tượng

Các trình xây dựng rất quan trọng đối với lập trình hướng đối tượng. Chúng cho phép bạn tạo các đối tượng, điều này rất cần thiết!

Trong Java, các hàm tạo trông giống như các phương thức khác và hoạt động theo cùng một cách. Bạn nên nhớ các quy tắc đặc biệt xung quanh hàm tạo mặc định, nạp chồng và chuỗi hàm tạo. Nếu các hàm tạo mới đối với bạn, bạn có thể muốn đọc các khái niệm Java cốt lõi khác mà bạn nên học khi bắt đầu.

Đăng lại Đăng lại tiếng riu ríu E-mail 10 khái niệm Java cốt lõi bạn nên học khi bắt đầu

Cho dù bạn đang viết GUI, phát triển phần mềm phía máy chủ hay ứng dụng di động sử dụng Android, học Java sẽ phục vụ tốt cho bạn. Dưới đây là một số khái niệm Java cốt lõi để giúp bạn bắt đầu.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Java
  • Mẹo mã hóa
Giới thiệu về tác giả Bobby Jack(58 bài báo đã xuất bản)

Bobby là một người đam mê công nghệ, người đã làm việc như một nhà phát triển phần mềm trong gần hai thập kỷ. Anh ấy đam mê chơi game, làm Biên tập viên đánh giá tại Tạp chí Switch Player và đắm mình trong tất cả các khía cạnh của xuất bản trực tuyến và phát triển web.

yêu cầu trình mô tả thiết bị usb không xác định không thành công
Xem thêm từ Bobby Jack

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký