日期:2014-05-20  浏览次数:20616 次

关于内部类和抽象类的组合使用
在研究内部类的时候突然想到能否和抽象类组合使用,比如:

package arraydemo;
import arraydemo.Outer.Inner;
class Outer{
int age = 25;
protected void trace(Object word){
System.out.println(word.toString());
}
abstract class Inner{
String name = "张三";
public abstract void write(Object something);
}
}
public class AbstractDemo extends Inner{//此处报错,由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用
static Outer out = new Outer();
public static void main(String[] args) {
System.out.println(out.age);
Outer.Inner in = out.new Inner(); 
}
public void write(Object something){
System.out.println(something.toString());
}
}

但是现在在实例化内部类的时候出现错误,提示由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用,请问有什么办法使得主方法中可以取得内部抽象类的实例吗?
如果能够实现的话再追问一句,这么做在开发中有意义吗?
抽象类?内部类

------解决方案--------------------
引用:
不好意思我没表述清楚,现在的问题是可以取得父类的实例,但是由于内部类本身是抽象的,所以无法通过一般的new 外部类实例.内部类构造函数来取得内部类的实例,因此我打算通过继承该抽象类实现向上转型取得Inner类型的对象。但现在报错的是主类无法继承抽象内部类,我的疑惑是有办法继承该抽象类吗?
比如:
class Middle extends Inner{//无法继承
//报错:由于某些中间构造函数调用,没有任何类型 Outer 的外层实例可用
}


楼主只要理解了这句: “试图在静态环境下继承非静态的父类”

你试图定义 class Middle 的环境是 静态 的,
而 Inner 是 非静态 的。
------解决方案--------------------
上面的代码你试一下,一个类继承内部类,必须在子类里调用父类的构造方法,调用父类构造方法必须要用到父类所在的外部类的一个实例;因为内部类是抽象的,只能取得其子类的实例、我也是初学者、