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