class Outer1 {
private int a; public Outer1(int a) {
this.a = a;
} class Inner {
public Inner() { } public void print() {
System.out.println("a=" + a);
}
}
}public class Simple extends Outer1.Inner{  //这句提示"由于某些中间构造函数调用,没有任何类型 Outer1 的外层实例可用" public static void main(String[] args) { }
}

解决方案 »

  1.   


    public class Simple extends Outer1.Inner{  //这句提示"由于某些中间构造函数调用,没有任何类型 Outer1 的外层实例可用"  public Simple (Outer1 outer1){
            outer1.super();
        }public static void main(String[] args) { } 
    }
      

  2.   

    因为你继承自非静态内部类,
    众所周知,在构造类的时候,同样会执行父类的构造方法,去创建属于父类的区域。
    而这个你继承的内部类的构造,要依赖于它的外部类存在。也就是说,如果没有Outer1也就没有你继承的Inner。按照你的构造方法,是默认的,那么无法创建Outer1,也没法构造Inner。
    那么就无法通过编译了。正确写法见2楼。
      

  3.   

    由于class Inner 的定义是非static的,也就是说必须有一个Outer1 的实例以后才能根据这个实例访问Inner.
    而public class Simple extends Outer1.Inner中的"Outer1.Inner"是想通过Class Outer1而不是 Outer1 Object来访问Inner,所以是不对的.
    把Inner声明成static 就行了.JDK的Tutorial中有详细说明.
    static public class Inner {
    public Inner() {} 
    }