-1

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

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

4 回答 4

7

Java 仅允许顶级类/接口为publicpackage.

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 节)。

我希望这很清楚。

于 2012-12-11T07:25:13.600 回答
1

嵌套类可以是static, private, protected, package-local 或public

顶级课程不是;

  • static因为这没有任何意义。 static对于嵌套类意味着它不包含对外部类的引用,但是如果您是外部类,则它没有用处。
  • private无法从另一个类文件访问类,因此无法访问私有顶级类。
  • protected类可能会从子类中使用,但使类abstract更清晰。恕我直言。
于 2012-12-11T08:40:16.027 回答
1

私有顶级类没有任何意义,因为您无法从任何地方访问它。

受保护意味着访问外部类的同一包或子类中的类。由于Java中没有包继承,因此受保护的类也没有任何意义。

当我们将方法/参数声明为static时,我们可以在不创建对象实例的情况下访问它。因为静态成员属于整个类,而不是类或对象的实例。由于顶级类没有封闭类,因此将顶级类定义为静态是没有意义的。

于 2012-12-11T07:29:59.627 回答
0

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

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

static行不通,因为这意味着它属于某个其他类,对于外部类来说永远不会如此。

于 2012-12-11T07:14:43.433 回答