Constructors không được kế thừa. Bạn sẽ cần phải khai báo một hàm tạo trong C
để lấy một đối số. Nó sẽ cần phải gọi hàm tạo siêu lớp thích hợp (nếu bạn không muốn hàm tạo của lớp bậc trên mặc định).
Phương thức khởi tạo duy nhất bạn có thể tránh khai báo là hàm tạo mặc định, no-arg và chỉ khi bạn khai báo không có hàm tạo nào. Đó là bởi vì trình biên dịch sẽ tạo một trình cho bạn nếu bạn không có các hàm tạo nào được khai báo. Trình biên dịch luôn chèn một cuộc gọi đến hàm tạo siêu lớp mặc định trừ khi bạn gọi một hàm tạo siêu lớp một cách rõ ràng.
Cũng lưu ý rằng nếu bạn không gọi rõ ràng một hàm tạo siêu lớp và không có hàm tạo mặc định nào trong lớp cha, bạn sẽ nhận được lỗi biên dịch.
EDIT: Nếu bạn có "nhiều lớp học như lớp C", thì cách khác để viết nhiều nhà thầu là sử dụng factory method pattern. Bạn có thể có tất cả các lớp thực hiện một hàm tạo mặc định và cung cấp một phương thức riêng biệt init()
lấy một bộ đối số tiêu chuẩn. Phương thức factory sẽ chấp nhận một đối tượng Class<? extends C>
và một số đối số khởi tạo, tạo một cá thể mới (sử dụng hàm tạo mặc định) và gọi phương thức init
của nó với các đối số khởi tạo. Bằng cách đó, bạn chỉ cần ghi đè phương thức init
cho các lớp con đó cần xử lý đặc biệt (luôn nhớ gọi qua super.init
).
Nguồn
2013-08-26 03:14:20
Bạn không thể gọi một constructor với một cuộc tranh cãi mà không cần viết một constructor mà mất cuộc tranh cãi. Câu hỏi của bạn không có ý nghĩa. – EJP