Không, chúng ta không thể khai báo top-level class là private hoặc protected. Chỉ được public hoặc default (không modifier). Nếu không có modifier, hiểu là default access (package-private).
Cú pháp
// Top-level class
public class TopLevelClassTest {
// Class body
}
Giải thích chi tiết
- Khai báo top-level class private → compiler báo: "modifier private is not allowed here". Top-level class không thể private. Tương tự cho protected.
- Protected nghĩa là member truy cập được bởi class cùng package và subclass (dù package khác). Không có ý nghĩa với top-level class.
- Top-level class chỉ được dùng modifier: public, abstract, final, hoặc không modifier (default/package accessibility).
- Inner classes (lớp lồng) CÓ THỂ khai báo private hoặc protected, nhưng outer class KHÔNG.
- Một file .java có thể có nhiều top-level class, nhưng tối đa 1 public top-level class. Tên file phải trùng tên class public.
Ví dụ sai: Khai báo class protected
protected class ProtectedClassTest {
int i = 10;
void show() {
System.out.println("Declare top-level class as protected");
}
}
public class Test {
public static void main(String args[]) {
ProtectedClassTest pc = new ProtectedClassTest();
System.out.println(pc.i);
pc.show();
System.out.println("Main class declaration as public");
}
}
Kết quả (lỗi compile)
modifier protected not allowed here
Ví dụ sai: Khai báo class private
private class PrivateClassTest {
int x = 20;
void show() {
System.out.println("Declare top-level class as private");
}
}
public class Test {
public static void main(String args[]) {
PrivateClassTest pc = new PrivateClassTest();
System.out.println(pc.x);
pc.show();
System.out.println("Main class declaration as public");
}
}
Kết quả (lỗi compile)
modifier private not allowed here
Tóm tắt modifier cho Top-level vs Nested Class
| Modifier | Top-level Class | Nested/Inner Class |
|---|---|---|
| public | ✓ (tối đa 1/file) | ✓ |
| default (package-private) | ✓ | ✓ |
| private | ✗ | ✓ |
| protected | ✗ | ✓ |
| abstract | ✓ | ✓ |
| final | ✓ | ✓ |
| static | ✗ | ✓ (static nested class) |