2011-12-26 11 views
25

Tôi đang đọc sách The Java Programming Language, 3rd edition.Công cụ sửa đổi được bảo vệ có nghĩa là gì?

Trong chương 3.5, nó minh họa modifier protected với những lời sau đây:

Chính xác hơn, ngoài việc truy cập trong chính lớp và mã trong cùng một gói , một thành viên bảo vệ cũng có thể được truy cập từ một lớp thông qua tham chiếu đối tượng có ít nhất cùng loại với lớp, tham chiếu của loại của lớp hoặc một loại phụ của nó.

Những lời khiến tôi bối rối, trong hai khía cạnh:

1. viên bảo vệ có thể được truy cập bằng mã trong cùng một gói? Những gì tôi biết trước đây là thành viên được bảo vệ chỉ có thể được truy cập bởi lớp con ...

2. Tôi không hiểu điều gì làm a protected member can also be accessed from ... có nghĩa là, bất cứ ai có thể giải thích cho tôi?

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html. được bảo vệ có nghĩa là thuộc tính/phương thức có thể được truy cập bên trong gói cũng như các loại phụ. – aishwarya

+0

Đây là một [cheat sheet] đơn giản (http://stackoverflow.com/a/33627846/276052) giải thích 'protected' và các access modifier khác. – aioobe

Trả lời

0

Tôi không hiểu thành viên được bảo vệ nào cũng có thể được truy cập từ ... có nghĩa là, bất kỳ ai cũng có thể giải thích cho tôi?

Ví dụ: bạn có đối tượng A và đối tượng B, cả hai cùng một lớp. Đối tượng A sẽ có thể truy vấn các thuộc tính được bảo vệ và các phương thức của đối tượng B nếu nó có tham chiếu đến nó. Trình sửa đổi được bảo vệ được thực thi ở cấp lớp, không phải ở cấp đối tượng. Điều này có thể có ích trong một số trường hợp.

11

Trong Java, protected có nghĩa là thành viên có thể được truy cập bởi bất kỳ lớp nào trong cùng một gói và theo lớp con ngay cả khi chúng nằm trong một gói khác.

Note

A protected variable is not visible outside the package 

ví dụ B kéo dài A và A có int bảo vệ x; nó có thể được sử dụng trong lớp B. Nhưng không thể truy cập bằng biến cá thể của nó

2

1) Có, các thành viên được bảo vệ có thể truy cập được từ cùng một gói. Đó là cách Java hoạt động.

2) Điều đó có nghĩa là các lớp con có thể truy cập chúng.

16
  1. Vâng, protected thành viên có thể được truy cập từ lớp đó, lớp con của lớp và cũng mọi tầng lớp trong cùng một gói của lớp (không quan trọng nếu đó là những lớp con hay không). Nếu bạn không biết rằng phần cuối cùng trước đó, sau đó bạn đã học được một cái gì đó mới.

  2. Điều đó đơn giản có nghĩa là bạn có thể sử dụng các thành viên đó; nếu một thành viên không thể truy cập, điều đó có nghĩa là bạn sẽ gặp lỗi trình biên dịch khi bạn cố gắng sử dụng nó.

+0

Đối với câu lệnh thứ 2: Nó không ném lỗi khi 'trạng thái int được bảo vệ;' được khai báo ban đầu và truy cập sau này. Bởi vì giá trị mặc định được đặt thành 0 tự động. Vì vậy, 'trạng thái' sẽ luôn luôn là' 0' khi nó không thể truy cập được. –

+0

@JanakaRRajapaksha giá trị mặc định của biến thành viên không liên quan gì đến khả năng truy cập. – Jesper

+0

Giả sử tôi đã khai báo nó từ đầu. Và cố gắng truy cập nó từ lớp không thể truy cập (x) hoặc phương thức (x). Vì nó không thể truy cập, nó sẽ có giá trị mặc định của nó khi xuất nó từ một nơi có thể truy cập. Bây giờ theo tuyên bố thứ 2 của bạn, tôi đang mong đợi một lỗi, nhưng nó không. Và nó chỉ đơn giản là cho 0 là giá trị mặc định của nó. Vì vậy, các mã trong "x", vô ích. –

0

Dưới đây là câu trả lời

  1. Yes. Các thành viên được bảo vệ (các biến mẫu và phương thức) của một lớp có thể được truy cập bởi các lớp khác trong cùng một gói cũng như bởi bất kỳ lớp nào khác mở rộng lớp này chứa thành viên được truy cập. Trong cùng một đặc điểm kỹ thuật, họ cũng đã đưa ra bảng nơi cấp độ truy cập tăng nghiêm ngặt cung cấp tất cả các truy cập được phép ở cấp độ trước đó: riêng tư -> gói -> bảo vệ -> công khai

  2. Là thành viên được bảo vệ (biến mẫu) trạng thái và phương thức/hành vi) của lớp X được thừa hưởng và hiển thị như một phần của các lớp con của X, Y1, Y2, Y3 và có thể tiếp tục xuống các cấp tiếp theo, bất kỳ tham chiếu đối tượng nào thuộc loại X hoặc Y1, Y2, y3 có thể được sử dụng để truy cập thành viên được bảo vệ đó.

0

Hãy nghĩ về nó giữa công cộng và riêng tư. Bạn có thể truy cập mọi thứ từ các lớp học công cộng và ít hơn từ các lớp học riêng tư.