上一篇文章探讨了在外部类以外的类中创建内部类的对象,这一篇文章要探讨从外部类中创建内部类的对象,其中内部类的构造方法为private。
上一篇文章探讨的第三种情况是:外部类和内部类都为public,外部类的构造方法为public,内部类的构造方法为private。这种情况下不能从外部类以外的类(Main类)中执行创建内部类对象的代码。那么,在这种情况下,能不能从外部类中创建内部类对象,即从外部类(OuterClass类)中调用内部类(InnerClass类)的私有构造方法呢?
我们把代码改成这样:
public class OuterClass {
private int i;
public OuterClass(int i) {
this.i = i;
System.out.println("Outer Class created!");
}
public InnerClass createInnerInstance(int j, int k) {
return (new InnerClass(j, k));
}
public class InnerClass {
protected int j;
protected int k;
private InnerClass(int j, int k) {
this.j = j;
this.k = k;
System.out.println("Inner Class created!");
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass out = new OuterClass(1);
OuterClass.InnerClass in = out.createInnerInstance(2, 3);
}
}
运行程序,发现程序运行正常,输出:
Outer Class created!
Inner Class created!
结论:外部类能调用内部类的私有构造方法。这个特性可以为我们提供更好的封装性。如果我们不希望外部类以外的类中的代码直接创建内部类的对象,而希望通过调用外部类的方法创建内部类的对象,我们就可以将内部类的构造方法设为private,仅供内部类自身及外部类访问。