代码之家  ›  专栏  ›  技术社区  ›  elai

为什么超级Java FX应用程序(extend)会忽略覆盖的函数?

  •  -2
  • elai  · 技术社区  · 1 周前

    我有一个关于JavaFX和非常奇怪的应用程序的实现的问题。让我用代码显示它:

    想象一个基本的应用程序:

    import javafx.application.Application;
    import javafx.stage.Stage;
    
    public class JavaFXApp extends Application {
        // constructor, ...
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage stage) {
            // important stuff
            initialize();
            // important stuff
            stage.show();
        }
    
        public void initialize() {
            System.out.println("default");
            // basically abstract
        }
    
        // and other functions.
    }
    

    以及它的扩展(按预期):

    public class JavaFXAppExtended extends JavaFXApp {
        // constructor, ...
    
        @Override
        public void initialize() {
            System.out.println("extended");
        }
    }
    

    现在的召唤 JavaFXApp 对我的眼睛没有问题。但打电话时 JavaFXAppExtended 这个 @Overwrite 大体上 忽略 initialize 从父类调用 因此

    JavaFXApp.main(args);
    -> default
    
    JavaFXAppExtended.main(args);
    -> default
    

    由此 “扩展” 应为 .

    那么,我错过了什么重要的事情吗?这是违法的吗?我是不是经验不足?这可能只是一个bug吗?我不知道。但我想知道。

    1 回复  |  直到 1 周前
        1
  •  2
  •   Joop Eggen    1 周前

    事实上 JavaFXAppExtended.main(args) 调用static JavaFXApp.main 因为没有 main 在JavaFXAppExtended中。调用的代码中仍然没有任何痕迹 JavaFXAppExtended 。与完全相同的代码 JavaFXApp.main(args) .

    没有继承 this 在静态函数中。因此调用了`JavaFXApp.launch。