不,我们不能将顶级类声明为private或protected。它可以是public 或default(没有修饰符)。如果它没有修饰符,则应该具有默认访问权限。
// A top level class public class TopLevelClassTest { //类体 }
如果将 顶级类声明为私有,则编译器将抱怨此处不允许使用修饰符private。这意味着顶级类不能为私有类,也可以将其应用于受保护的访问说明符。
受保护意味着该成员可以被 同一包中的任何类以及子类 访问,即使它们位于另一个包中也是如此。
在顶级类只能有公共的,抽象的和最终的改性剂,它也可以不定义在所有任何类修饰符。这称为默认/程序包可访问性。
我们可以将 内部类声明为私有或受保护的类,但是在外部类中则不允许这样做。
一个Java源文件中可以定义多个顶级类,但是最多可以有一个 公共顶级类声明。文件名必须与公共类的名称匹配。
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"); } }
在上面的示例中,我们可以将类声明为protected,这将引发错误,表明此处不允许使用修饰符protected。因此上述代码无法执行。
输出结果
modifier protected not allowed here
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"); } }
在上面的示例中,我们可以将类声明为private,这将引发错误,表明此处不允许使用修饰符private。因此上述代码无法执行。
输出结果
modifier private not allowed here