在研究内部类的时候突然想到能否和抽象类组合使用,比如:
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 的外层实例可用,请问有什么办法使得主方法中可以取得内部抽象类的实例吗?
如果能够实现的话再追问一句,这么做在开发中有意义吗?抽象类 内部类

解决方案 »

  1.   

    有什么办法使得主方法中可以取得内部抽象类的实例吗?取决于内部抽象类的可见性,类与构造方法都可见的话可以用匿名类的方式 new
    楼主代码的编译错误是试图在静态环境下继承非静态的父类,非静态的内部类实例化必须依赖于某个外部类实例。
      

  2.   

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

  3.   


    楼主只要理解了这句: “试图在静态环境下继承非静态的父类”你试图定义 class Middle 的环境是 静态 的,
    而 Inner 是 非静态 的。
      

  4.   

    public class AbstractDemo extends Inner{
    public AbstractDemo(Outer outer){
    outer.super();
    }
    static Outer out = new Outer();     
    public static void main(String[] args) {         
    System.out.println(out.age);         
    Outer.Inner in = new AbstractDemo(out);
    in.write(out);
    }     
    public void write(Object something){         
    System.out.println(something.toString());