0
其明显的是,普通类的默认访问修饰符是包私有的 ,它对于内部Local类或内部匿名 是私有的,但对我来说不明显的是,成员类像私人成员当我们试图从容器类 以外看到它时,它是私密的还是包私人的?成员类访问修饰符
其明显的是,普通类的默认访问修饰符是包私有的 ,它对于内部Local类或内部匿名 是私有的,但对我来说不明显的是,成员类像私人成员当我们试图从容器类 以外看到它时,它是私密的还是包私人的?成员类访问修饰符
像蒂姆·乙指出默认一切都是包私有的,除了在接口。
以下代码段演示了这一点。
public class OuterClass {
@Override
public String toString() {
return "I am the public outer class";
}
static class StaticInnerClass {
@Override
public String toString() {
return "I am the package private inner class";
}
}
class NonStaticInnerClass {
@Override
public String toString() {
return "I am the package private non static inner class";
}
}
public static void main(String[] args) {
OuterClass oc = new OuterClass();
OuterClass.StaticInnerClass ic = new OuterClass.StaticInnerClass();
NonStaticInnerClass nsic = oc.new NonStaticInnerClass();
System.out.println(oc);
System.out.println(ic);
System.out.println(nsic);
System.out.println(new SecondClass());
}
}
class SecondClass {
@Override
public String toString() {
OuterClass oc = new OuterClass();
OuterClass.StaticInnerClass ic = new OuterClass.StaticInnerClass();
OuterClass.NonStaticInnerClass nsic = oc.new NonStaticInnerClass();
return oc.toString() + "\n" + ic.toString() + "\n" + nsic.toString();
}
}
除非另有说明,否则一切都有默认访问权限(这是私有包)。
(除了在这里的一切是默认的公共接口)
,因为我知道内部局部类的默认修饰符是私人,因为它私有的,可以阻止包含它像一个方法 – Tony
你说的话是没有意义的?你的意思是局部变量?局部变量不是私有的 - 它们本地没有访问修饰符。 –