Giới thiệu về constructor trong java: constructor là một dạng đặc biệt của phương thức. Nó được gọi tại thời điểm khởi tạo đối tượng dùng để khởi tạo các giá trị cho thuộc tính của đối tượng.
Đặc điểm của constructor:
- Constructor không có kiểu trả về tường minh
- Constructor phải có tên giống với tên lớp
- Nếu ta không có constructor trong một lớp, trình biên dịch sẽ tự tạo ra một constructor mặc định trong lớp đó.
Constructor mặc định
Constructor mặc định là constructor không có tham số.
class Bike{ Bike(){ System.out.println("Da khoi tao doi tuong Bike"); } } public class TEST { public static void main(String[] args){ Bike bike = new Bike(); } }
Ở ví dụ trên ta đã khởi tạo một đối tượng Bike và constructor được gọi.
Da khoi tao doi tuong Bike
Lưu ý: Nếu lớp không có constructor thì trình biên dịch tự động tạo ra một constructor mặc định nhằm khởi tạo các giá trị mặc định (0, null ) cho các thuộc tính của lớp.
Cùng xem ví dụ sau
class Bike{ int id; String name; public void display(){ System.out.println("id : "+ id); System.out.println("name : "+ name); } } public class TEST { public static void main(String[] args){ Bike bike = new Bike(); bike.display(); } }
id : 0 name : null
Mặc dù trong lớp Bike không có constructor nhưng khi biên dịch chương trình sẽ tự tạo ra một constructor mặc định. Constructor này có tác dụng khởi tạo các giá trị mặc định cho các thuộc tính của lớp Bike.
Constructor overloading trong java
Constructor overloading là một kĩ thuật dùng thường dùng. Bạn có thể dùng nhiều constructor để khởi tạo nhiều hay ít thuộc tính. Chương trình sẽ phân biệt các constructor và tự động gọi đến constructor thích hợp. Các constructor này phân biệt bởi số lượng và kiểu của các thuộc tính.
Cùng xem ví dụ sau.
class Bike{ int id; String name; String gioitinh; Bike(int id){ this.id = id; }; Bike(int id, String name){ this.id = id; this.name = name; } Bike(int id, String name, String gioitinh){ this.id = id; this.name = name; this.gioitinh = gioitinh; } Bike(){}; //Constructor mặc định public void display(){ System.out.println("id : "+ id); System.out.println("name : "+ name); System.out.println("gioi tinh : "+ gioitinh); } } public class TEST { public static void main(String[] args){ Bike bike_1 = new Bike(15); bike_1.display(); Bike bike_2 = new Bike(15,"tuan"); bike_2.display(); Bike bike_3 = new Bike(15,"tuan","nam"); bike_3.display(); } }
Sau khi chạy ta có kết quả
id : 15 name : null gioi tinh : null id : 15 name : tuan gioi tinh : null id : 15 name : tuan gioi tinh : nam
Lưu ý:
class Bike{ int id; String name; String gioitinh; Bike(int id, String name){ this.id = id; this.name = name; } Bike(int id, String gioitinh){ this.id = id; this.gioitinh = gioitinh; } public void display(){ System.out.println("id : "+ id); System.out.println("name : "+ name); System.out.println("gioi tinh : "+ gioitinh); } }
- Các bạn làm như thế này là sai vì khi khởi tạo các bạn truyền vào tham số thứ hai kiểu String nhưng chương trình không thể phân biệt chuỗi đó là name hay giới tính. Vậy nên chương trình sẽ biên dịch lỗi.
- Mình khuyến khích các bạn nên tạo một constructor mặc định ( không có tham số đầu vào ).
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận