从超类static main创建子类

wrz*_*asa 3 java methods static instantiation derived-class

我有一个通用的抽象类(SuperClass).我希望有一个main方法,它将是每个子类的默认主要方法,并且会做同样的事情,但是使用适当的子类对象派生并调用它.

像这样:

 public abstract class SuperClass {

    // some code here...

    public static void main(String args[]) {
       // here instantiate the subclass
       // extending this SuperClass, and call
       // some methods
    }
 }

 public SubClass extends SuperClass {
      // here just implement some 
      // abstract methods from SupeClass
      // and NOT implement main()
 }
Run Code Online (Sandbox Code Playgroud)

现在我希望能够运行SubClass独立程序,执行默认main派生程序SuperClass.如何SubClassmain方法中实例化适当的对象?

  • 我不能做新的因为SuperClass我不知道实际的名字SubClass
  • 使用反射它,我不能这样做,因为我无法得到的名字SubClass从实现的静态方法SuperClass(从超类中的一个子类中获取名称)

在C++,AFAIR中,有一些类似于virtual方法的修饰符,我想在这里会很有用.在Java中如何做?

Edw*_*rzo 7

如果希望子类成为应用程序入口点,则不继承静态方法,在子类中编写main方法.

  • @WRz子引用可以直接调用父类中定义的方法,但这不会使该方法成为虚方法.这只是语法上的含糖.您既不能覆盖静态方法,也可以通过在子类中提供具有相同签名的另一个实现来隐藏父实现.使用静态方法,在编译时根据用于访问它的引用类型选择要调用的方法实现,这与虚拟方法相反,虚方法的实现是在运行时根据给定对象的实际类型选择的. . (2认同)