2013-05-27 34 views
25

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ì?

+1

[Điều này sẽ cung cấp cho bạn câu trả lời đầy đủ.] (Http://stackoverflow.com/a/16728381/1079354) – Makoto

+0

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

Trả lời

24

public, protectedprivate 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.

28

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.6Java Tutorial (Controlling Access to Members of a Class) để biết thêm chi tiết.

4

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.

0

Đố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; 
} 
0

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{} 
1

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

0

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.

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