Tôi đã tự hỏi tại sao Java được thiết kế mà không có chỉ thị friend
có sẵn trong C++ để cho phép kiểm soát tốt hơn các phương thức và biến mẫu nào có sẵn từ bên ngoài gói trong đó một lớp đã được định nghĩa.Tại sao chỉ thị bạn bè bị thiếu trong Java?
Tôi không thấy bất kỳ lý do thiết thực nào cũng như bất kỳ hạn chế cụ thể nào, có vẻ như đó chỉ là vấn đề thiết kế nhưng sẽ không tạo ra bất kỳ sự cố nào nếu được thêm vào ngôn ngữ.
+1 cho đóng gói :) – fresskoma
–1 để đóng gói. Đây là một sự hiểu lầm phổ biến. Nó chỉ đơn giản là sai. Mặc dù đúng là 'bạn' * có thể * được sử dụng để phá vỡ đóng gói, vì vậy các tính năng khác có thể bị lạm dụng. Được sử dụng đúng cách, 'friend' * tăng cường * đóng gói bởi vì nó cho phép kiểm soát truy cập chi tiết hơn:' friend' thay thế sử dụng 'public', không sử dụng' private'. [Giải thích kỹ thuật tại C++ FAQ] (http://www.parashift.com/c++-faq-lite/friends.html#faq-14.2) (Điều đó nói rằng, tôi hoàn toàn hài lòng với khả năng hiển thị gói, nhưng tuyên bố rằng 'người bạn 'phá vỡ đóng gói vẫn còn sai.) –
@KonradRudolph Hoàn toàn đồng ý. Các lớp bạn bè là điều cần thiết để tách các mối quan tâm. Ví dụ, tôi có một lớp 'Serializer' nên được phép ghi vào các trường của một cá thể, vì vậy tôi cho phép bạn truy cập. Các lớp khác, không thể ghi cụ thể vào các trường và phải đi qua giao diện mà tôi cung cấp. Cách duy nhất bạn có thể làm điều này trong Java là đưa mọi thứ vào cùng một gói. – crush