0

mysample我有这样的代码,我需要InnerClass在. 我尝试通过创建一个新对象来访问它,但我得到了.getInnerS()NestedClassInnerClassjava.lang.StackOverflowError

public class NestedClass{
    private String outer = "Outer Class"; //NestedClass instance variable
    NestedClass.InnerClass innerClass = new NestedClass.InnerClass();

    void getOuterS(){
        System.out.println(outer); 
    }
    void getInnerS(){
        System.out.println(innerClass.mysample);
    }
    static class InnerClass{
        private String mysample = "Inner Class"; //InnerClass instance variable,
        NestedClass a = new NestedClass();
        void getIn(){
            System.out.println(mysample);
        }
        void getOut(){
            System.out.println(a.outer);
        }
    }
    public static void main(String[] args){
         NestedClass nestedClass = new NestedClass();
         NestedClass.InnerClass nestedInner = new NestedClass.InnerClass(); 
         nestedClass.getOuterS();
         nestedClass.getInnerS();
         nestedInner.getIn();
         nestedInner.getOut();
    }
}
4

3 回答 3

3

InnerClass构造函数中:

NestedClass a = new NestedClass(); 

因此,您创建了一个 new NestedClass,它创建了一个 new InnerClass,它创建了自己的自己NestedClass,并具有相应的InnerClass.... 难怪stackoverflow。

如果你想访问封闭类,你应该使用(内部InnerClass方法)

NestedClass.this   
于 2012-09-08T15:25:32.063 回答
1
NestedClass a = new NestedClass();

在静态 InnerClass 类中创建 NestedClass 的实例,并且 InnerClass 是静态的,这是一个循环。

InnerClass 不需要是静态的,这应该可以

public class NestedClass {
private String outer = "Outer Class"; //NestedClass instance variable
NestedClass.InnerClass innerClass = new NestedClass.InnerClass();

void getOuterS(){
    System.out.println(outer); 
}
void getInnerS(){
    System.out.println(innerClass.mysample);
}
class InnerClass{
    private String mysample = "Inner Class"; //InnerClass instance variable,
    NestedClass a = NestedClass.this;
    void getIn(){
        System.out.println(mysample);
    }
    void getOut(){
        System.out.println(a.outer);
    }
}
public static void main(String[] args){
     NestedClass nestedClass = new NestedClass();
     NestedClass.InnerClass nestedInner = nestedClass.innerClass; 
     nestedClass.getOuterS();
     nestedClass.getInnerS();
     nestedInner.getIn();
     nestedInner.getOut();
}


}
于 2012-09-08T15:26:23.173 回答
0

有了这个解决方案,成员类是static. 为了更好的比较,您可以阅读 静态类声明

静态嵌套类(描述)

静态嵌套类不能访问外部类的非静态字段和方法,这在某些方面类似于类中定义的静态方法。只能通过外部类的实例引用来访问非静态字段和方法。在这方面,静态嵌套类与任何其他顶级类非常相似。

此外,静态嵌套类可以访问外部类的任何静态方法,包括私有方法。

这些类的好处主要在于实体的逻辑分组以改进封装,以及节省类空间。

public class NestedClass{
  private static String outer = "Outer Class"; //NestedClass instance variable
  InnerClass innerClass = new InnerClass();

  void getOuterS(){
    System.out.println(outer);
  }
  void getInnerS(){
    System.out.println(InnerClass.mysample);
  }
  InnerClass getInner(){
    return innerClass;
  }
  static class InnerClass{
    private static String mysample = "Inner Class"; //InnerClass instance variable,
     void getIn(){
      System.out.println(mysample);
    }
    void getOut(){
      System.out.println(outer); //access a static member
    }
  }
  public static void main(String[] args){
    NestedClass nestedClass = new NestedClass();
    NestedClass.InnerClass nestedInner = nestedClass.getInner();
    nestedClass.getOuterS();
    nestedClass.getInnerS();
    nestedInner.getIn();
    nestedInner.getOut();
  }
}
于 2012-09-08T15:44:33.040 回答