2013-10-16 17 views
5

Tôi muốn hỏi xem tuyên bố lớp học trong java chỉ có thể là publicmặc định?Tuyên bố Lớp - công khai và mặc định

Tôi đã đọc rằng chỉ có một lớp public bên trong tệp và tệp đó phải là tên của lớp.

Ví dụ Test.java

public class Test { 

} 

Nhưng tôi quan sát thấy rằng trong một lớp học tôi có thể không có lớp public nhưng có thể có nhiều lớp mặc định.

Ví dụ Exam.java

class Exam { 

} 

class Examination { 

} 

Tại sao nó rằng tôi chỉ có thể có một public lớp nhưng có thể có nhiều lớp mặc định bên trong một tập tin?

+0

Một lớp học chỉ có thể được khai báo công khai hoặc gói riêng (trong trường hợp, không có sửa đổi nào được áp dụng cho khai báo của nó, nó là gói riêng tư). Một lớp không thể được khai báo là 'private' hoặc' protected' trừ khi nó là một lớp bên trong hoặc một lớp lồng nhau tĩnh. Lớp công khai yêu cầu một lớp được lưu trong một tệp có cùng tên với tên lớp. – Lion

Trả lời

7

Tại sao tôi chỉ có thể có một lớp công khai nhưng có thể có nhiều lớp học mặc định là bên trong một tệp?

7.6. Top Level Type Declarations:

Hạn chế này ngụ ý rằng phải có ít nhất một loại như vậy mỗi đơn vị biên dịch. Hạn chế này giúp dễ dàng cho trình biên dịch Java để tìm một lớp có tên trong gói. Trong thực tế, nhiều lập trình viên chọn đặt từng loại hoặc loại giao diện trong bộ biên dịch riêng của nó đơn vị, có hay không là công khai hoặc được gọi bằng mã trong các đơn vị biên dịch khác .

Nếu lớp học không có công cụ sửa đổi (công cụ sửa đổi mặc định), chỉ có thể truy cập từ cùng một gói.

+2

+1 và mặc định được gọi là 'gói riêng tư '. –

+0

@ sᴜʀᴇsʜᴀᴛᴛᴀ Luôn ở đó để cải thiện câu trả lời :) cảm ơn. – Maroun

3

Đây là quyết định thiết kế như được chỉ ra bởi người trả lời khác. Điều này giúp bạn tổ chức mã trong thời gian dài. Bạn có thể có các lớp bên trong công cộng.

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