请问各位高手私有的内部类如何在外部类的main方法中实例化?我的代码如下:
编译器报错的信息是:
OutClass.java:39: 无法从静态上下文中引用非静态 变量 this
    InnerClass1 classDemo1 = new InnerClass1();
                             ^
OutClass.java:44: 无法从静态上下文中引用非静态 变量 this
    InnerClass2 classDemo2 = new InnerClass2();
后来我在两个内部类上加上了都加上了静态修饰符static结果编译运行都成功了,请各位高手为我解释一下是怎么回事?public interface Destination
{
  String readLabel();
}
public interface Contents
{
  int value();
}public class OutClass
{
  private /*static*/ class InnerClass1 implements Destination, Contents
  {
    public String readLabel()
    {
      return "InnerClass1 String readLabel()";
    }
    public int value()
    {
      return 8;
    }
  }
  private /*static*/ class InnerClass2 implements Destination, Contents
  {
    public String readLabel()
    {
      return "InnerClass2 String readLabel()";
    }
    public int value()
    {
      return 8;
    }
  }
  /**
     public Destination getInnerClass1()
     {
       Destination class1 = new InnerClass1();
       return class1;
     }
     public Contents getInnerClass2()
     {
       Contents class2 = new InnerClass2();
       return class2;
     }
 */
  public static void main(String[] args)
  {
    InnerClass1 classDemo1 = new InnerClass1();
    System.out.println(classDemo1.readLabel());
    System.out.print("InnerClass1 int value()");
    System.out.println(classDemo1.value());
    System.out.println();
    InnerClass2 classDemo2 = new InnerClass2();
    System.out.println(classDemo2.readLabel());
    System.out.print("InnerClass2 int value");
    System.out.println(classDemo2.value());
  }
}

解决方案 »

  1.   

        OutClass.InnerClass1 classDemo1 = new OutClass.InnerClass1();
        System.out.println(classDemo1.readLabel());
        System.out.print("InnerClass1 int value()");
        System.out.println(classDemo1.value());
        System.out.println();
        OutClass.InnerClass2 classDemo2 = new OutClass.InnerClass2();
        System.out.println(classDemo2.readLabel());
        System.out.print("InnerClass2 int value");
        System.out.println(classDemo2.value()); 这样可以不!
      

  2.   

    package net.xiaohai;/**
     * @author haihai
     * 
     */
    public class TestMain {
    public TestMain() {
    A a=new A();
    } public static void main(String[] args) {
    new TestMain();
    }}
    class A{

    public A() {
    B b=new B();
    System.out.println(b.getInstance());

    }
    class B{
    public B() {
    }
    private  int getInstance(){
    return 11111111;
    }
    }
    }
    不知道楼主的意思是不是,定义一个私有的非静态内部类,在外部调用其中的方法.私有的非静态内部类B在A的构造器实例,外部类如TestMain调用,打出11111.
      

  3.   

    因为外部类调用静态方法的时候不需要实例化它本身,所以它的内部类还没有初始化,也就不能new出一个对象
    如果真要这样做,应该先OutClass out=new OutClass();然后再调用out.new InnerClass();来实例化内部类
    class OutClass{
     class InnerClass{
       innerMethod(){
          System.out.println("inner");
       };
     }public static void main(String...args){
       OutClass out = new OutClass();
       InnerClass in=out.new OutClass();
       in.innerMethod();
    }}