Tại sao có họ tạo ra ý nghĩa khác nhau với cùng modifier trong Java và C#?
Lựa chọn phải được thực hiện giữa sự đơn giản và khả năng xác định chính xác các quyền truy cập khác nhau. Các lựa chọn khác nhau được tạo ra bởi những người tạo Java và (sau này) bởi những người sáng tạo của C#.
Tôi có thể bảo vệ C# như thế nào (Quyền truy cập được giới hạn trong lớp có chứa hoặc các loại bắt nguồn từ lớp có chứa.) Trong Java?
Bạn không thể. Java bị hạn chế hơn vào thời điểm này.
Nhưng có lẽ bạn nên giới hạn việc sử dụng từ khóa protected
như trong cả hai cách sử dụng nó có nghĩa là phá vỡ nguyên tắc đóng gói chung. Việc sử dụng này đôi khi hữu ích, vì một ngôn ngữ quá nghiêm ngặt có thể có nghĩa là quá nhiều mã vô dụng, nhưng hãy cẩn thận để không tạo ra thứ gì đó quá gắn bó và khó thay đổi và duy trì. Cho phép truy cập vào các lĩnh vực nội bộ hoặc phương pháp để ghi đè các lớp học thường có nghĩa là bạn có một hệ thống phân cấp nặng với quá nhiều khớp nối thực hiện (thích thành phần trên phân cấp để bảo trì).
Lưu ý rằng một biến hoặc phương thức được khai báo mà không có bất kỳ công cụ điều chỉnh truy cập nào có sẵn cho bất kỳ lớp nào khác trong cùng một gói. Theo ý kiến của tôi, đó là lành mạnh hơn cho phép truy cập bởi các lớp con của bất kỳ gói nào.
Here's the complete grid:
![enter image description here](https://i.stack.imgur.com/q4exl.png)
Nguồn
2012-09-13 07:06:32
"hãy cẩn thận để không làm điều gì đó quá căng thẳng và khó thay đổi và duy trì". Tôi không hiểu. Làm thế nào để sửa đổi đóng một vai trò trong đó? – Shashwat
Khi bạn có các lớp con truy cập vào một trường nội bộ, bạn có một khớp nối mạnh mẽ cấm bạn thay đổi việc thực hiện siêu lớp. Đó là một trong những vấn đề đóng gói giúp tránh. –
OK. Cảm ơn :) – Shashwat