如何编写一个抽象的主类

时间:2013-08-16 21:49:45

标签: java main abstract

我需要写一些进口商。他们需要所有相同的初始化。所以我尝试编写一个抽象类,它执行所有初始化并且还有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())。

有人知道如何解决这个问题吗? TIA!

4 个答案:

答案 0 :(得分:4)

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

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

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();
        }
        ....
    }
}

答案 1 :(得分:1)

new AbstracterImporter() { 
  public void run() { 
    // ... 
  } 
};

我为当前在移动设备上缺乏格式化而道歉。

答案 2 :(得分: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();
    }
}

答案 3 :(得分: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();

     }

}