2

我需要写一些进口商。他们需要所有相同的初始化。所以我尝试写一个抽象类,它做所有的初始化,也有main方法,这样所有的子类只需要实现run()它们特定的导入工作:

public abstract class AbstractImporter {

    public AbstractImporter() {
        // Initialization
    }

    public abstract void run();

    public static void main(String[] args) {
        AbstractImporter importer = new AbstractImporter();
        importer.run();
    }

}

public class ConcreteClass() {

  public void run() {
    // Do some importing  
  } 

}

当然,它无法创建这个抽象类的实例(new AbstractImporter())。

有谁知道如何解决这个问题?蒂亚!

4

4 回答 4

4

显然你需要一个具体的类 - 匿名或其他。

最好将主要方法移动到另一个类并根据数据(您的域特定或常量)实例化适当的具体类,然后运行它。这样每个实现都可以独立于其他实现。

public abstract class AbstractImporter {

    public AbstractImporter() {
        // Initialization
    }

    public abstract void run();
}

public class ConcreteImporter1 extends AbstractImporter {
    public void run() {
        //do something
    }
}


public class ImporterMain() {

    public static void main(String[] args) {
        AbstractImporter importer = createImporter(args[1]);
        importer.run();
    }

    private static AbstractImporter createImporter(String type) {
        if (type.equals("1")) {
            return new ConcreteImporter1();
        }
        ....
    }
}
于 2013-08-16T22:12:23.683 回答
1
new AbstracterImporter() { 
  public void run() { 
    // ... 
  } 
};

对于目前在移动设备上缺乏格式,我深表歉意。

于 2013-08-16T21:52:35.700 回答
0
public abstract class AbstractImporter {

    public AbstractImporter() {
        // Initialization
    }

    public abstract void run();

    public static void main(String[] args) {
        AbstractImporter importer = new AbstractImporter(){
            public void run() {
                System.out.println("Anonymous implementation");
            }
        };
        importer.run();
    }
}
于 2013-08-16T22:02:52.427 回答
0

您不能创建抽象类的实例。

public abstract class AbstractImporter {

public AbstractImporter() {
    // Initialization
}

public abstract void run();

}

public class ConcreteClass extends AbstractImporter{

    public void run(){
            //Implementation

    }         

    public static void main(String args[]){

            AbstractImporter ai = new ConcreteClass();
            ai.run();

     }

}
于 2014-06-01T06:00:31.533 回答