为什么相同,可以与内部类一起使用?
public class Hello {
class inner{ // this class can use any modifier
}
}
为什么相同,可以与内部类一起使用?
public class Hello {
class inner{ // this class can use any modifier
}
}
Java 仅允许顶级类/接口为public
或package
.
JLS 的第 7.6 节状态(顶级类型声明):
默认情况下,a 中声明的顶级类型
package
只能在该包的编译单元内访问,但可以将一个类型声明为 public 以授予从其他包中的代码访问该类型的权限(第 6.6 节、第 8.1.1 节、 §9.1.1)。
接口修饰符的 JLS 的第 9.1.1 节指出:
访问修饰符 protected 和 private仅适用于直接封闭类或枚举声明(第 8.5.1 节)中的成员接口。
修饰符
static
仅适用于成员接口(第 8.5.1 节、第 9.5 节), 而不适用于顶级接口(第 7.6 节)。
我希望这很清楚。
嵌套类可以是static
, private
, protected
, package-local 或public
顶级课程不是;
static
因为这没有任何意义。 static
对于嵌套类意味着它不包含对外部类的引用,但是如果您是外部类,则它没有用处。private
无法从另一个类文件访问类,因此无法访问私有顶级类。protected
类可能会从子类中使用,但使类abstract
更清晰。恕我直言。私有顶级类没有任何意义,因为您无法从任何地方访问它。
受保护意味着访问外部类的同一包或子类中的类。由于Java中没有包继承,因此受保护的类也没有任何意义。
当我们将方法/参数声明为static时,我们可以在不创建对象实例的情况下访问它。因为静态成员属于整个类,而不是类或对象的实例。由于顶级类没有封闭类,因此将顶级类定义为静态是没有意义的。
所有类型的访问修饰符都可以用于所有类型的class
s(匿名类除外)。
具有其他类型修饰符的类将提供访问权限,就像方法一样。
static
行不通,因为这意味着它属于某个其他类,对于外部类来说永远不会如此。