为什么私有,静态,受保护的访问修饰符不与类一起使用?

时间:2012-12-11 07:12:11

标签: java

为什么相同,可以与内部类一起使用?

public class Hello {
    class inner{ // this class can use any modifier
    }
}               

4 个答案:

答案 0 :(得分:7)

Java只允许顶级类/接口为publicpackage

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)

嵌套类可以是staticprivateprotected,包本地或public

顶级课程不是;

  • static因为这没有任何意义。 static表示嵌套类意味着它不包含对外部类的引用,但如果您是外部类,则它没有用处。
  • private类无法从其他类文件访问,因此无法访问私有顶级类。
  • protected类可能会从子类中使用,但使类abstract更清晰。 IMHO。

答案 3 :(得分:0)

所有类型的访问修饰符都可用于所有类型的class(匿名类除外)。

具有其他类型修饰符的类将提供访问权限,就像方法一样。

static不起作用,因为它意味着它属于某个其他类,对于外部类来说永远不会是真的。