【发布时间】:2014-12-10 07:43:40
【问题描述】:
我见过两种实例化内部类的方法。例如
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();
}
还有什么其他原因让我实施一种方式而不是另一种方式?是否有关于如何做到这一点的最佳实践?
【问题讨论】:
-
恕我直言,第二种方式更好。添加私有构造函数以防止第一种方法。
-
@StanislavL 根据您的经验有什么具体原因吗?
-
更多控制在外部类,防止错误使用
标签: java inner-classes