[英]How do you call a subclass method from a superclass in Java?
我環顧四周,找到了問題的答案,但我沒有。 您如何在Java中從超類調用子類方法?
基本上,我要執行的操作是:我有一個稱為exec
的方法,該方法將String
作為命令的參數。 我希望能夠在開發人員已經從超類重寫的子類中調用exec
方法,而無需提前知道子類的名稱。
這就像Thread
類的工作方式。 我不打算做我發現的每個答案都要做的事情,那就是Superclass object = new Subclass();
然后只需調用object.method();
。
這是超類中的代碼
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.input.*;
import javafx.scene.text.Text;
public abstract class Console extends Application {
private String title;
private static Text output = new Text();
public void create(String title) {
this.title = title;
launch();
}
public void start(Stage stage) {
stage.setOnCloseRequest((WindowEvent event) -> {
System.exit(0);
});
stage.setTitle(title);
stage.setResizable(false);
Group root = new Group();
Scene scene = new Scene(root, 800, 400);
stage.setScene(scene);
ScrollPane scroll = new ScrollPane();
scroll.setContent(output);
scroll.setMaxWidth(800);
scroll.setMaxHeight(360);
TextField input = new TextField();
input.setLayoutX(0);
input.setLayoutY(380);
input.setPrefWidth(800);
scene.setOnKeyPressed((KeyEvent event) -> {
if(event.getCode() == KeyCode.ENTER) {
exec(input.getText());
input.clear();
}
});
root.getChildren().add(scroll);
root.getChildren().add(input);
stage.show();
}
public static void appendOutput(String value) {
Platform.runLater(() -> {
output.setText(output.getText() + "\n" + value);
});
}
protected abstract void exec(String command);
}
[...]我有一個稱為exec的方法,該方法將String作為命令的參數。 我希望能夠在開發人員已經從超類重寫的子類中調用exec方法,而無需提前知道子類的名稱。
您不必做任何特別的事情。 您只需從基類的代碼中調用它即可。 Java中的所有方法都是虛擬的,因此將調用子類的重寫實現。
這是一個演示:
public class Test {
public static void main(String[] args) {
Console console = new ConsoleSubclass();
console.start();
console.keyPressed();
}
}
abstract class Console {
Runnable keyPressedHandler;
private void setOnKeyPressed(Runnable handler) {
keyPressedHandler = handler;
}
public void keyPressed() {
keyPressedHandler.run();
}
public void start() {
setOnKeyPressed(() -> {
exec();
});
}
abstract void exec();
}
class ConsoleSubclass extends Console {
@Override
void exec() {
System.out.println("In ConsoleSubclass");
}
}
public class UsingClass
{
SuperClassType x = null;
x = goGetClassReference(); // this can get an instance of SuperClassType,
// or of any subclass of it.
x.methodName(); // this calls methodName on the class obtained above;
//if goGetClassReference got a subclass, this calls methodName() on the subclass.
}
我的特定JavaFX子類化問題的答案在此處子類化JavaFX Application 。 對於一般的子類化,這里的答案就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.