【发布时间】:2014-01-02 13:19:52
【问题描述】:
很明显,普通类的默认访问修饰符是包私有的 它对于内部 Local 类或内部匿名是私有的 但是当我们试图从容器类外部看到它时,对我来说成员类并不明显,它就像一个私有成员 那么它是私有的还是包私有的?
【问题讨论】:
标签: java inner-classes access-modifiers
很明显,普通类的默认访问修饰符是包私有的 它对于内部 Local 类或内部匿名是私有的 但是当我们试图从容器类外部看到它时,对我来说成员类并不明显,它就像一个私有成员 那么它是私有的还是包私有的?
【问题讨论】:
标签: java inner-classes access-modifiers
除非您另外指定,否则所有内容都具有默认访问权限(包私有)。
(除了在默认情况下所有内容都是公共的接口)
【讨论】:
就像 Tim B 所说的,默认情况下所有东西都是包私有的,除了在接口中。
以下代码段演示了这一点。
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();
}
}
【讨论】: