Video: Lập trình hướng đối tượng C++ - Bài 34. Hàm main có đối số dòng lệnh | Bui The Tam 2025
Java là một cách tuyệt vời để lập trình, nhưng đôi khi bạn cần phải sáng tạo. Để làm điều này, bạn có thể sử dụng các tham số kiểu ký tự đại diện. Giả sử bạn có một phương thức được tuyên bố như sau:
public void addItems (ArrayList list)
{
// cơ thể không hiển thị
}
Câu hỏi suy nghĩ: Có phải câu lệnh sau đây được biên dịch?
addItems (new ArrayList ());
Trả lời: Không.
Thật đáng ngạc nhiên vì
Chuỗi
là một loại phụ
Đối tượng
. Vì vậy, bạn nghĩ rằng một tham số nói rằng nó chấp nhận
ArrayList
của các đối tượng chấp nhận
ArrayList
của chuỗi.
Thật không may, thừa kế không hoạt động khá như vậy khi nói đến các tham số kiểu chính thức. Thay vào đó, bạn phải sử dụng một tính năng của generics, được gọi là ký tự đại diện.
ArrayList
, bạn phải mã như sau:
public void addItems (ArrayList list)
Trong trường hợp này, dấu chấm hỏi cho biết bạn có thể mã bất kỳ kiểu nào ở đây.
Đó là gần như tốt như thừa kế, nhưng nếu bạn muốn thực sự giới hạn các tham số để bộ sưu tập của một lớp học cụ thể? Ví dụ: giả sử bạn đang làm việc trên hệ thống biên chế có
nhân viên cấp cao
siêu lớp với hai lớp con
HourlyEmployee
và
SalariedEmployee
và bạn muốn phương pháp này chấp nhận một
ArrayList
của các đối tượng
Nhân viên
,
Các đối tượng HourlyEmployee
hoặc các đối tượng
SalariedEmployee
mở rộng
vào ký tự đại diện, như sau:
public void addItems (ArrayList list)
Sau đó, bạn có thể gọi
addItems
với
ArrayList
loại
Nhân viên
,
Người làm việc hàng giờ
hoặc
SalariedEmployee
.
Bây giờ, trước khi bạn gọi nó một ngày, hãy lấy ví dụ này thêm một bước nữa: Giả sử phương thức
addItems
này xuất hiện trong một lớp chung chung sử dụng một tham số kiểu chính thức
để xác định loại phần tử class accepts, và bạn muốn phương pháp
addItems
để chấp nhận
ArrayList
của loại
E
hoặc bất kỳ lớp con của nó. Để làm được điều đó, bạn phải khai báo phương pháp
addItems
như sau:
Public void addItems (ArrayList list)
Ở đây, tham số kiểu ký tự đại diện
đơn giản có nghĩa là
ArrayList < có thể thuộc loại
E
vor bất kỳ loại nào kéo dài
E
.