Tôi đã nhận thấy rằng nếu không viết public
trước khi một lớp của nó hoạt động giống như một public class
. Tôi không thể hiểu tại sao vậy? Nó sẽ hiển thị lỗi khi tôi không khai báo lớp học là public
, private
hoặc protected
. Nhưng nó hoạt động tốt. Lý do là gì?sự khác biệt giữa `lớp công khai` và chỉ` lớp` là gì?
Trả lời
public
, protected
và private
là công cụ sửa đổi truy cập. Public có nghĩa là đối tượng có thể được truy cập bởi bất kỳ lớp nào, được bảo vệ bởi lớp con, riêng bởi chính lớp đó, không có công cụ sửa đổi nào có nghĩa là "gói được bảo vệ", vì vậy đối tượng có thể được truy cập bởi các lớp từ cùng một gói.
Chủ đề là lớp, phương pháp, biến thành viên.
Tôi đã nhận thấy rằng nếu không viết công khai trước khi một lớp hoạt động giống như một lớp công khai.
Không. Trừ khi nó được công khai, lớp sẽ không hiển thị với mã khác không có trong cùng một gói. Khả năng truy cập mặc định (không thể xác định rõ ràng) là lớp (hoặc thành viên khác) chỉ hiển thị với mã khác trong cùng một gói.
Bạn nên đọc Java Language Specification section 6.6 và Java Tutorial (Controlling Access to Members of a Class) để biết thêm chi tiết.
Lớp học là package private
theo mặc định (như được nêu here) để nó không hoạt động theo cùng một cách. Bạn chỉ nghĩ rằng đó là bởi vì bạn đã không cố gắng để tiêu thụ lớp học của bạn từ một gói khác nhau.
Đối với tờ khai của các lớp học là avaible chỉ có hai từ khóa:
- công .example: public class Student {// ...}
- gói tin (như mặc định) .example: lớp Note {// ...}. Nó chỉ hiển thị trong gói của anh ấy.
Bạn chỉ có thể sử dụng riêng tư và được bảo vệ nếu bạn khai báo thành viên bên trong một lớp học. Ví dụ:
public class Student{
protected Note note;
}
Nếu bạn không cung cấp công cụ sửa đổi truy cập theo quyền riêng tư của gói mặc định. Lớp học không thể truy cập được bên ngoài gói. Lý tưởng nhất là JLS nên bao gồm một từ khóa để truy cập gói để tránh nhầm lẫn và hậu quả không mong muốn.
Cái gì đó như,
default class Student{}
Có phải là chỉ có một public class mỗi java file nguồn và tên của tập tin phải trùng khớp với public class này.
Câu hỏi tương tự được hỏi trước trên SO. Vui lòng tìm thấy nó here
Nó hoạt động giống nhau chỉ vì bạn đang làm việc với chỉ một tệp và trong cùng một gói.
Nếu bạn có nhiều gói thì bạn gặp sự cố. Lớp không có "công khai" trước khi tên của lớp không thể được tạo trong gói khác. Bạn không thể sử dụng hàm tạo của nó.Bạn không thể truy cập nó bên ngoài gói mà lớp học đã được tạo.
- 1. Sự khác biệt giữa các thành viên lớp học công khai và công khai ở Delphi là gì?
- 2. Sự khác biệt giữa "Lớp" và "Cấp" là gì?
- 3. Sự khác biệt giữa GetHashCode được triển khai trong lớp Object và ValueType là gì?
- 4. Sự khác biệt giữa lớp tĩnh và lớp bình thường là gì?
- 5. Sự khác biệt giữa lớp Debug và lớp Trace là gì?
- 6. Sự khác biệt giữa một lớp mẫu và một mẫu lớp là gì?
- 7. Sự khác biệt giữa lớp singleton và lớp tĩnh?
- 8. Sự khác biệt giữa Mô-đun trong js và Lớp học trong php là gì?
- 9. Sự khác biệt giữa một Lớp Tóm tắt và Mixin là gì?
- 10. Sự khác biệt giữa gói android.opengl và javax.microedition.khronos.opengles là gì?
- 11. Sự khác biệt giữa WCF và Lớp Dịch vụ Miền Dịch vụ RIA là gì?
- 12. Thuật ngữ: Sự khác biệt giữa một lớp học và một thành phần là gì?
- 13. Sự khác biệt giữa struct_time và datetime là gì?
- 14. Sự khác biệt giữa Hashtable và Từ điển là gì?
- 15. Sự khác biệt giữa gói, mô-đun và lớp trong Perl hướng đối tượng là gì?
- 16. Sự khác biệt giữa bao đóng và các lớp học truyền thống là gì?
- 17. Asp.NET MVC - Sự khác biệt giữa ViewPage và lớp WebViewPage
- 18. Sự khác biệt giữa addSubview và insertSubview trong lớp UIView
- 19. Sự khác biệt giữa các lớp java.rmi.registry.Registry và java.rmi.Naming
- 20. Sự khác biệt giữa getUsableSpace và getUnallocatedSpace của lớp FileStore
- 21. Sự khác biệt giữa các lớp System.StringComparer và System.StringComparison?
- 22. Sự khác biệt giữa các lớp và không gian tên?
- 23. Sự khác biệt giữa lập trình khai báo và bắt buộc là gì?
- 24. Sự khác biệt giữa "1.0f" và "1.f" là gì?
- 25. Sự khác biệt giữa Lớp học và Lớp học <?>
- 26. Sự khác biệt giữa IEquatable và chỉ ghi đè Object.Equals() là gì?
- 27. Sự khác biệt giữa '&' và ',' trong Generics Java là gì?
- 28. Sự khác biệt giữa móc và gọi lại là gì?
- 29. Sự khác biệt giữa lớp nguyên thủy và lớp bao bọc trong ánh xạ cột JPA (Hibernate) là gì?
- 30. Sự khác biệt giữa crontab và cronjob là gì?
[Điều này sẽ cung cấp cho bạn câu trả lời đầy đủ.] (Http://stackoverflow.com/a/16728381/1079354) – Makoto
Bạn có thể tham khảo liên kết này , cung cấp cùng kiến thức: http://stackoverflow.com/questions/614818/what-is-the-difference-between-public-private-protected-and-nothing/614844#614844 – Deepak