Java:如何使用超类的Static方法创建子类的实例

时间:2014-03-14 14:33:10

标签: java

我的具体问题是我想在基类中创建一个静态方法,它可以将子类的实例保存在文件中。基类中的另一个静态方法,它检索数据并重新创建子类的实例。

我已经完成了所有工作,除了在我的策略中我需要在基类的静态方法中创建子类的实例。请看下面我的意思。

所以一般的问题是在Java中如何从超类的静态方法中创建子类的实例。

class Base

    public static Void saveAllInstances(){
       saveAttributesofAllInstancesInFile();  // this works
    }

    public static Void retrieveAllInstances(){
       destroyAllInstances(); // this works
       getInstanceAttributesFromFile();  // this works and returns e.g. ArrayList<HashMap>

       for( instanceAttributes : retrievedInstances ){

         // Here is the part I cant figure out: I want to create an instance of 
         // the subclass here 
         sub = new Sub();

         sub.setAttributes(instanceAttributes); //this works
       }
}

class Sub extends Base{
}

2 个答案:

答案 0 :(得分:0)

除了您的代码不是有效的Java语法之外,完全按照您的方式完成。然而,正如其他人所说,你正在做的事情实际上可能更适合(纯粹制造)工厂模式。

Base.java

public class Base {
    public static void retrieveAllInstances() {
        Sub sub = new Sub();
    }
}

Sub.java

public class Sub extends Base{
}

工作正常。除了循环引用外,如果你不关心可维护性,那就把自己搞得一团糟。

答案 1 :(得分:0)

使用工厂模式可以正常工作。在伪代码中看起来像这样:

class MainFactory{

    protected Worker makeWorker(){
        return new Worker();
    }

    public createIntanceOfSubworker(){
       Worker i = makeWorker()
    }
}

class SubFactory extends MainFactory{
    @override
    protected SubWorker makeWorker(){
        return new SubWorker();
    }
}

class Worker{
}

class SubWorker extends Worker{
}