Java中如何从超类调用子类方法?

2023-12-28

我环顾四周,想找到问题的答案,但找不到。 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 的方法,它采用字符串作为命令的参数。我希望能够调用开发人员从超类重写的子类中的 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");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何从超类调用子类方法? 的相关文章

随机推荐

  • 如何在 Travis CI 上安装某些东西而不超时?

    我正在尝试测试 travis ci org 上构建的包 但 pip install scipy 遇到超时 Installing collected packages scipy Running setup py install for sc
  • 如何从 Excel 单元格获取完整值,而不是显示的(四舍五入)值?

    我在从工作表的单元格检索确切值时遇到问题 如果我打开文件 单元格有一个十进制数 仅显示 4 位小数 但如果我单击特定单元格 则该值会不同 有 6 位小数 我知道这是应用于单元格的设置 以便仅显示 4 位小数 现在我尝试使用 ClosedXM
  • WPF中如何移动焦点?

    我想知道是否有办法将焦点从当前控件移至 WPF 中 TabIndex 分配的控件上的其他控件 例子 我有 TabIndex 1 到 5 的控件 有没有办法将焦点从 1 跳转到 5
  • 从 C# 类设置 Gridview“标题”的样式

    我正在尝试在 C 文件中设置 ASP Net GridView 标题的样式 这是我返回样式化 GridView 的方法 private GridView setupGridView string caption var gview new
  • 检查context.Request.Body的条件是azure api管理策略中的JArray或JObject

    我正在使用 Azure API 管理策略表达式将供应商值发送到每个帖子 对后端 API 的放置和删除请求 我编写了一个代码 当请求类型为 JObject 时 该代码工作正常 但我有一些请求可以是 JArray 类型的情况 在这种情况下它会抛
  • 如何在IIS7中禁用应用程序池空闲超时?

    如果我将空闲超时设置为0 它会被禁用吗 是的 将空闲超时值设置为零将禁用空闲超时 奇怪的是 这没有记录在 MS 文档中 但我的证据来自 IIS 设置架构 如果您查看了 IIS 设置架构 C Windows System32 inetsrv
  • 如何安装:OpenSSL + WAMP

    这里有人有关于如何在我的本地开发计算机上获取 SSL 的清晰详细的步骤吗 我已在 c wamp 上安装了最新版本的 WAMP 2 2c 我在网上找到的说明在大多数情况下似乎已经过时 并且缺乏正确完成工作所需的详细信息 指南 WampServ
  • wl-pprint-extras 中的可选空格和多个替代项

    是否有一种好的 可接受的方法来获得两种以上的替代布局 特别是支持可选空间的方式 特别是 我可能想通过以下三种方式之一打印列表 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 按照该优先顺序 您可以先尝试一种替代方案 然后再尝试另
  • 从 FireWire 获取视频流

    我正在尝试通过 FireWire 将摄像机 Sony HVR Z1E 中的视频流式传输到我的计算机 传入的图片 流应由一些期望 CVMat 格式 来自 openCV 的函数进一步处理 好吧 我现在的问题是我不知道如何获取流 好吧 openC
  • Istio 分布式跟踪与 Jaeger 不起作用

    我正在尝试设置本地 k8s 集群minikube已安装istio我在使用 Jaeger 启用分布式跟踪时遇到问题 我有3个微服务A gt B gt C 我正在传播所需的所有标头 x request id x b3 traceid x b3
  • escapeshellarg 和 escapeshellcmd 有什么区别?

    PHP 有 2 个密切相关的函数 escapeshellarg http php net escapeshellarg and escapeshellcmd http php net escapeshellcmd 它们似乎都做类似的事情 即
  • super() 并更改协作方法的签名

    在多重继承设置中 例如所列出的 我该如何使用super 并处理层次结构中的类之间函数签名发生变化的情况 即我可以重写这个例子 在 python3 中 来使用super 例子取自文章super 被视为有害文章 https fuhm net s
  • 为什么在这个 Perl 示例中,defineed sdf 返回 true?

    我在 Perl 中尝试了这个例子 有人可以解释为什么这是真的吗 if defined sdf print true 它打印true sdf 可以是任何名称 另外 如果定义了 sdf 函数并且返回 0 则不会打印任何内容 print sdf
  • C++ 中的赋值运算符返回右值还是左值?

    C 中的赋值运算符返回右值还是左值 如果它是左值 那么两个参数中的哪一个将在这里递增 a b 它返回一个lvalue 根据第 5 17 条 赋值运算符 和复合赋值运算符 从右到左分组 全部都需要一个可修改的左值作为他们的左边 操作数并返回引
  • SQLServer连接预登录

    在 SQL Server 2000 中使用 Hibernate 时出现以下错误 Dec 12 2015 12 54 20 AM com microsoft sqlserver jdbc SQLServerConnection Prelogi
  • sys.dm_exec_sql_text 如何工作?

    你能解释一下原因吗 select from sys dm exec sql text sql handle 抛出错误 无效的列名 sql handle 但是 select from sys sysprocesses cross apply
  • 如何定义具有多个 OR 运算符的正则表达式,其中每个术语都包含空格前缀和后缀?

    我正在准备数据提取任务 我需要删除一组术语 每个源记录字符串中可以没有 部分或全部出现 有超过 100 000 条目标记录 我想避免执行单个术语匹配 替换操作 因为 a 要删除的术语列表可能会增长 并且 b 一次执行一个术语的当前匹配 替换
  • 如何在 R 中获得特定的彩色比例?

    我想使用看起来有点常见的色标 看看here https stackoverflow com questions 8421536 a true heat map in r and here http tctechcrunch2011 file
  • 按月计算 cumsum() 但如果该月没有数据则重复这些值

    我有数据 df date col1 col2 0 1 16 2016 apple 20 1 2 1 2016 apple 40 2 2 2 2016 pear 60 3 3 13 2016 apple 10 4 5 4 2016 apple
  • Java中如何从超类调用子类方法?

    我环顾四周 想找到问题的答案 但找不到 Java中如何从超类调用子类方法 基本上我想做的是这样的 我有一个名为exec这需要一个String作为命令的参数 我希望能够致电exec开发人员在事先不知道子类名称的情况下从超类重写的子类中的方法