Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Có thể khai báo top-level class là protected hoặc private trong Java không?

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

ModifierTop-level ClassNested/Inner Class
public✓ (tối đa 1/file)✓
default (package-private)✓✓
private✗✓
protected✗✓
abstract✓✓
final✓✓
static✗✓ (static nested class)