2009-08-29 35 views
10

Nếu tôi có một lớp java là gói riêng (được khai báo với "lớp", không phải "lớp công khai"), thực sự không có sự khác biệt nếu các phương thức bên trong được khai báo công khai hoặc được bảo vệ hoặc riêng tư, phải không? Vậy tôi nên sử dụng cái gì, hoặc khi nào tôi nên sử dụng? Tôi hơi bối rối.Java - Phương pháp tiếp cận phương pháp bên trong gói riêng tư?

Trả lời

18

Nếu tôi có lớp java là gói riêng tư (được khai báo với "lớp", không phải "lớp công khai"), thực sự không có sự khác biệt nếu các phương thức bên trong được công khai hoặc được bảo vệ hoặc riêng tư, đúng?

Có thể không phải ngay lập tức. Nhưng nếu bạn sau đó (hoặc trong tương lai) tuyên bố một lớp 'được bảo vệ' hoặc 'công khai' kế thừa từ lớp gói riêng, thì khả năng hiển thị của các thành viên của lớp gốc làm vấn đề.

Khi @kmccoy chỉ ra, tuyên bố lớp học là loại bỏ cuối cùng khả năng của các lớp con.

Nhưng điều này thực sự chỉ làm cửa sổ. Nếu sau đó bạn quyết định rằng bạn thực sự cần phải tạo các lớp con, bạn chỉ cần xóa final ... và sau đó bạn quay trở lại tình huống mà việc lựa chọn các công cụ sửa đổi truy cập không quan trọng.

IMO, dòng dưới cùng là bạn nên chọn các công cụ sửa đổi phù hợp nhất ... ngay cả khi không cần thiết ngay bây giờ. Nếu không có gì khác, lựa chọn của bạn của modifiers nên tài liệu ý định của bạn như là nơi mà các ranh giới trừu tượng nằm.

+0

Nếu lớp học là 'lớp cuối cùng SomeClass' thì vấn đề hiển thị thành viên có quan trọng không? – kmccoy

+2

Nếu sửa đổi cuối cùng bị loại bỏ trong một số tái cấu trúc tương lai :) Hãy nhớ đây là phần mềm, "cuối cùng" không có nghĩa là "đặt trong đá không bao giờ thay đổi", nó có nghĩa là "không thể lấy được một lớp con từ loại này vì nó được viết ngay bây giờ." –

4

Phương thức công khai bên trong một lớp gói được công khai cho các lớp trong cùng một gói. Tuy nhiên, các phương thức riêng tư sẽ không thể truy cập được bởi các lớp trong cùng một gói.

Các vấn đề liên quan