Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写抽象的主类_Java_Main_Abstract - Fatal编程技术网

Java 如何编写抽象的主类

Java 如何编写抽象的主类,java,main,abstract,Java,Main,Abstract,我需要写信给进口商。它们需要所有相同的初始化。因此,我尝试编写一个抽象类,该类完成所有初始化并具有main方法,因此所有子类只需实现run()即可完成其特定的导入工作: public abstract class AbstractImporter { public AbstractImporter() { // Initialization } public abstract void run(); public static void ma

我需要写信给进口商。它们需要所有相同的初始化。因此,我尝试编写一个抽象类,该类完成所有初始化并具有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  
  } 

}
当然,它无法创建此抽象类的实例(
newabstractimporter()

有人知道如何解决这个问题吗?蒂亚

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

我为当前移动设备上缺少格式表示歉意。

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

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

不能创建抽象类的实例

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

     }

}

你希望main方法做什么?@JBNizet我喜欢在具体的子类中避免main方法,因此这个抽象超类的main方法应该实例化子类并调用run方法。你将如何在父类main方法中实例化子类??你确定你想做什么吗?@技术白痴不,你是对的。可能太晚了……;)抱歉,我没有注意到,我不是想在之后编辑它,但我打字了,是想在
运行之前添加一个
void
,谢谢你的回答。当我用一个有效的
run()
方法创建这个类的子类,并调用它的超类的main方法时,就会调用匿名类的
run()
方法,而不是我的子类的方法-class@t777:当然,您的子类没有运行!您必须创建子类的对象,而不是匿名类的对象。@HoverCraftFullOfels,因此子类需要自己的run方法。但是我希望避免这种情况(如果可能)。@t777:re
“因此子类需要自己的run方法。”
——这没有任何意义。如果希望实例是子类的实例,则必须使其成为该子类的实例,方法是对该子类调用new,或使用某种工厂方法。