Về cơ bản để 2 constructor thế kia sẽ không tận dụng được khả năng tái sử dụng code. Lấy đơn giản 1 trường hợp cụ thể như này:
Như bình thường, như code của bạn, truyền freeBags vào constructor và không động chạm gì đến nó:
public Passenger(int freeBags) {
this.freeBags = freeBags;
}
public Passenger(int freeBags, int checkedBags) {
this.freeBags = freeBags;
this.checkedBags = checkedBags;
}
Oke code này k có vấn đề gì cả, chạy bình thường luôn. Nhưng đến 1 lúc nào đó, bạn muốn truyền freeBags vào constructor nhưng đồng thời, muốn kiểm tra Passenger chỉ được phép mang tối đa 10 freeBags chẳng hạn. Bạn sẽ làm thế nào?
Ta có thể kiểm tra giá trị ở ngay trong constructor đúng không?
public Passenger(int freeBags) {
if (freeBags > 10) {
this.freeBags = 10;
} else {
this.freeBags = freeBags;
}
}
Hay ho ở đây này. Với constructor thứ 2, bạn không tận dụng lại constructor đầu tiên, thì bạn sẽ phải lặp lại đoạn code kiểm tra số lượng freeBags.
public Passenger(int freeBags, int checkedBags) {
if (freeBags > 10) {
this.freeBags = 10;
} else {
this.freeBags = freeBags;
}
this.checkedBags = checkedBags;
}
Hay chỉ cần dùng this(freeBags) để tận dụng đoạn code của constructor thứ nhất:
public Passenger(int freeBags, int checkedBags) {
this(freeBags);
this.checkedBags = checkedBags;
}
Đây mới là với 2 constructor và code đơn giản, bạn thử hình dùng với 1 constructor xử lí phức tạp, và class của bạn có rất nhiều constructor, thì sẽ ra sao

Dù constructor đơn giản hay không, tốt nhất là cứ nên dùng this để đỡ phải code nhiều mà đảm bảo đc code k chạy sai.