35

可能重复:
Java:为什么我们可以将顶级类定义为私有的?

为什么我们不能声明一个私有外部类?如果我们可以有内部私有类,那么为什么我们不能有外部私有类......?

4

6 回答 6

25

私有外部类将毫无用处,因为没有任何东西可以访问它。

查看更多详情:

Java:为什么我们可以将顶级类定义为私有的?

于 2013-02-04T18:08:53.200 回答
14

private修饰符将使您的班级无法从外部访问,因此不会有任何优势,我认为这就是为什么它是非法的并且只有public&abstractfinal允许的。

注意:即使你做不到protected

于 2013-02-04T18:07:24.410 回答
12

要回答您的问题:

如果我们可以有内部私有类,那么为什么我们不能有外部私有类......?

您可以,区别在于内部类处于“类”访问级别,而“外部”类处于“包”访问级别。来自Oracle 教程

如果一个类没有修饰符(默认值,也称为包私有),则它仅在其自己的包中可见(包被命名为相关类的组 - 您将在后面的课程中了解它们。)

因此,package-private(不声明修饰符)是声明“外部”类私有所期望的效果,只是语法不同。

于 2013-02-04T18:09:53.630 回答
4

你可以。

package test;

public class Test {
    public static void main(String[] args) {
        B b = new B();
    }
}

class B {
  // Essentially package-private - cannot be accessed anywhere else but inside the `test` package
}
于 2013-02-04T18:19:07.020 回答
1

你不能private上课,但你可以second上课:

public class App14692708 {
    public static void main(String[] args) {
        PC pc = new PC();
        System.out.println(pc);
    }
}

class PC {
    @Override
    public String toString() {
        return "I am PC instance " + super.toString();
    }
}

还要记住,static内部类与单独的类没有区别,除了它的名称是OuterClass.InnerClass. 因此,如果您不想使用“闭包”,请使用静态内部类。

于 2013-02-04T18:14:21.613 回答
0

private 使类只能被声明它的类访问。如果我们将整个类设为私有,则外部任何人都无法访问该类并使其无用。

内部类可以设为私有,因为外部类可以访问内部类,而如果将外部类设为私有则情况并非如此。

于 2013-02-04T18:16:47.047 回答