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) { }
}
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) { }
}
public class Simple extends Outer1.Inner{ //这句提示"由于某些中间构造函数调用,没有任何类型 Outer1 的外层实例可用" public Simple (Outer1 outer1){
outer1.super();
}public static void main(String[] args) { }
}
众所周知,在构造类的时候,同样会执行父类的构造方法,去创建属于父类的区域。
而这个你继承的内部类的构造,要依赖于它的外部类存在。也就是说,如果没有Outer1也就没有你继承的Inner。按照你的构造方法,是默认的,那么无法创建Outer1,也没法构造Inner。
那么就无法通过编译了。正确写法见2楼。
而public class Simple extends Outer1.Inner中的"Outer1.Inner"是想通过Class Outer1而不是 Outer1 Object来访问Inner,所以是不对的.
把Inner声明成static 就行了.JDK的Tutorial中有详细说明.
static public class Inner {
public Inner() {}
}