日期:2014-05-20 浏览次数:20862 次
public class Simple extends Outer1.Inner{ //这句提示"由于某些中间构造函数调用,没有任何类型 Outer1 的外层实例可用" public Simple (Outer1 outer1){ outer1.super(); } public static void main(String[] args) { } }
------解决方案--------------------
因为你继承自非静态内部类,
众所周知,在构造类的时候,同样会执行父类的构造方法,去创建属于父类的区域。
而这个你继承的内部类的构造,要依赖于它的外部类存在。
也就是说,如果没有Outer1也就没有你继承的Inner。
按照你的构造方法,是默认的,那么无法创建Outer1,也没法构造Inner。
那么就无法通过编译了。
正确写法见2楼。
------解决方案--------------------
由于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() {}
}