Các nhà xây dựng không thể kế thừa vì nó có thể gây ra hành vi kỳ lạ và không mong muốn. Cụ thể hơn, nếu bạn thêm một hàm tạo mới vào một lớp cơ sở, tất cả các lớp dẫn xuất sẽ nhận được một cá thể của hàm tạo đó. Đó là một điều xấu trong một số trường hợp, bởi vì có thể lớp cơ sở của bạn chỉ định các tham số không có ý nghĩa đối với các lớp dẫn xuất của bạn.
Một ví dụ phổ biến cho điều này là trong nhiều ngôn ngữ, lớp cơ sở cho tất cả các đối tượng (thường được gọi là "Đối tượng") có một hàm tạo không có tham số. Nếu các hàm tạo được kế thừa, điều này có nghĩa là tất cả các đối tượng đều có một hàm tạo tham số và không có cách nào để nói "Tôi muốn những người tạo ra một cá thể của lớp này để cung cấp các tham số X, Y và Z, nếu không mã của chúng sẽ không biên dịch. " Đối với nhiều lớp, điều quan trọng là các tham số nhất định phải được định nghĩa cho hàm thích hợp của chúng và làm cho các hàm tạo không thể di truyền là một phần của cách tác giả lớp có thể đảm bảo rằng một số tham số luôn được xác định.
Chỉnh sửa để trả lời nhận xét: Ramesh chỉ ra rằng nếu các nhà thầu được kế thừa như anh muốn, anh ta luôn có thể ghi đè các nhà xây dựng lớp cơ sở bằng cách sử dụng các hàm tạo riêng được khai báo trong mỗi lớp dẫn xuất. Điều đó chắc chắn đúng, nhưng có một vấn đề hậu cần với chiến lược này. Nó đòi hỏi các tác giả của các lớp dẫn xuất phải xem các lớp cơ sở chặt chẽ và thêm một hàm tạo riêng nếu chúng muốn khối thừa kế của hàm tạo lớp cơ sở. Không chỉ là rất nhiều công việc cho những người viết các lớp học có nguồn gốc, loại phụ thuộc ngầm này trên các lớp học chính xác là thứ có thể gây ra hành vi kỳ lạ.
Ramesh - không phải là những gì bạn mô tả sẽ không thể thêm vào ngôn ngữ. Nói chung nó không được thực hiện bởi vì loại hành vi có thể gây nhầm lẫn cho mọi người và dẫn đến rất nhiều gỡ lỗi và viết mã.
Quintin Robinson cung cấp một số câu trả lời rất đáng giá cho câu hỏi này trong các nhận xét chắc chắn đáng đọc.
Nguồn
2009-03-06 00:48:54
trùng lặp của http://stackoverflow.com/questions/426484/why-are-constructors-not-inherited –