可能重复:
Java:为什么我们可以将顶级类定义为私有的?
为什么我们不能声明一个私有外部类?如果我们可以有内部私有类,那么为什么我们不能有外部私有类......?
可能重复:
Java:为什么我们可以将顶级类定义为私有的?
为什么我们不能声明一个私有外部类?如果我们可以有内部私有类,那么为什么我们不能有外部私有类......?
private
修饰符将使您的班级无法从外部访问,因此不会有任何优势,我认为这就是为什么它是非法的并且只有public
&abstract
是final
允许的。
注意:即使你做不到protected
。
要回答您的问题:
如果我们可以有内部私有类,那么为什么我们不能有外部私有类......?
您可以,区别在于内部类处于“类”访问级别,而“外部”类处于“包”访问级别。来自Oracle 教程:
如果一个类没有修饰符(默认值,也称为包私有),则它仅在其自己的包中可见(包被命名为相关类的组 - 您将在后面的课程中了解它们。)
因此,package-private(不声明修饰符)是声明“外部”类私有所期望的效果,只是语法不同。
你可以。
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
}
你不能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
. 因此,如果您不想使用“闭包”,请使用静态内部类。
private 使类只能被声明它的类访问。如果我们将整个类设为私有,则外部任何人都无法访问该类并使其无用。
内部类可以设为私有,因为外部类可以访问内部类,而如果将外部类设为私有则情况并非如此。