Khi đọc các câu hỏi khác nhau về Stack Overflow và mã của người khác, sự đồng thuận chung về cách thiết kế các lớp được đóng lại. Điều này có nghĩa là theo mặc định trong Java và C #, mọi thứ đều riêng tư, các trường là cuối cùng, một số phương thức là cuối cùng và đôi khi các lớp thậm chí là cuối cùng .
Ý tưởng đằng sau điều này là để che giấu các chi tiết thực hiện, đó là một lý do rất tốt. Tuy nhiên, với sự tồn tại của protected
hầu hết các ngôn ngữ OOP và tính đa hình, điều này không hoạt động.
Mỗi lần tôi muốn thêm hoặc thay đổi chức năng cho một lớp tôi thường bị cản trở bởi sự riêng tư và cuối cùng được đặt ở mọi nơi. Ở đây chi tiết thực hiện vấn đề: bạn đang thực hiện và mở rộng nó, biết rõ hậu quả là gì. Tuy nhiên vì tôi không thể truy cập vào các trường và phương thức riêng tư và cuối cùng, tôi có ba tùy chọn:
- Đừng mở rộng lớp, chỉ giải quyết vấn đề dẫn đến mã phức tạp hơn
- Sao chép và dán cả lớp, giết chết mã tái sử dụng
- Ngã ba dự án
Đó không phải là lựa chọn tốt. Tại sao không protected
được sử dụng trong các dự án được viết bằng ngôn ngữ hỗ trợ nó? Tại sao một số dự án rõ ràng cấm kế thừa từ các lớp học của họ?