2012-09-13 31 views
5

Tôi đã so sánh các công cụ sửa đổi truy cập trong Java và C#. Tôi muốn tìm một sự thay thế của C# 's protected internal trong Java. Nhưng tôi nhận thấy rằng protected công cụ sửa đổi khác nhau ở cả hai ngôn ngữ (C#Java). protected trong Java tương đương với protected internal của C# vì thành viên cũng có thể truy cập trong cùng một gói.Lẫn lộn về các số truy cập trong Java và C#

Tôi có hai câu hỏi

  • Tại sao họ đã tạo ra ý nghĩa khác nhau với cùng modifier trong Java và C#?
  • Làm cách nào để có quyền truy cập protected của C# (Truy cập bị 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?

Trả lời

2

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

+0

"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

+0

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. –

+0

OK. Cảm ơn :) – Shashwat

0

Trong tài liệu Java API, specifier truy cập từ khóa không được cung cấp bởi Sun.com. Hãy thử Ví dụ này

D:\>javac Demo.java 
Demo.java:1: error: **modifier** private not allowed here 
private class Test 
     ^
1 error