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

问题描述 投票:0回答:1

我对 Java FX 和非常奇怪的应用程序的实现有疑问。让我用代码来展示一下:

想象一个基本应用程序:

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
其中

“扩展”是预期的

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

java javafx
1个回答
0
投票
实际上

JavaFXAppExtended.main(args)

 调用静态 
JavaFXApp.main
,因为 JavaFXAppExtended 中没有 
main
JavaFXAppExtended
的调用代码中没有留下任何痕迹。与
JavaFXApp.main(args)
完全相同的代码。

静态函数中没有继承的

this

。因此`JavaFXApp.launch被调用。

© www.soinside.com 2019 - 2024. All rights reserved.