我见过两种实例化内部类的方法。例如
class OuterClass{
private int x = 23;
class InnerClass{
public void printX(){
System.out.println(x);
}
public void printStuff(){
System.out.println("This is an inner class method");
}
}
}
public class TestMain321{
public static void main(String[] args){
OuterClass o = new OuterClass();
OuterClass.InnerClass i = o.new InnerClass();
i.printX();
}
}
和
class OuterClass{
private int x = 23;
InnerClass i = new InnerClass();
public void innerMethod(){
i.printX();
}
class InnerClass{
public void printX(){
System.out.println(x);
}
public void printStuff(){
System.out.println("This is an inner class method");
}
}
}
public class TestMain123{
public static void main(String[] args){
OuterClass o = new OuterClass();
o.innerMethod();
i.printStuff();//WON'T COMPILE
}
}
第一个例子,我可以直接调用内部类方法,因为我在main()中实例化内部类
OuterClass.InnerClass i = o.new InnerClass();
i.printX();
不同之处在于,在第二个例子中,我直接在外部类中实例化内部类,所以稍后在main方法中我不能直接调用内部类的方法,因为它不知道引用。我必须创建一个外部类方法来调用内部类方法,例如,请参阅外部类中的innerMethod()。
public void innerMethod(){
i.printX();
}
我还有其他原因可以实现一种方式吗?有关如何做到这一点的最佳做法吗?
答案 0 :(得分:4)
您的内部类应该始终是私有的,以防止外部访问,除了外部类。 Effective Java Book和此question中提到了这一点。
如果你的内部阶级需要公开,那么认真考虑将其作为正常的阶级而不是内部阶级。