理解类变量的继承

2023-11-30

我正在建造一个Challenge24SolverJava 中的类。逻辑本身起作用并找到预期的解决方案(具有任意数量的参数)。无论如何,这部分项目正在按我的预期进行。

这个问题来自于解决方案的表示问题。可以公平地说,我已经用 Python 完成了这个项目,并决定尝试用 Java 作为一种介绍,这可能是问题所在,我也尝试像 Python 一样这样做。

以下是我的一些课程:

abstract class Operation { \\ Basic operation class
  static String token;
  abstract public double operate (double x, double y);
}
class AddOp extends Operation {
  static String token = "+";
  public double operate (double x, double y) {
    return x+y;
  }
}
//other operation classes SubOp, MulOp, DivOp
class Challenge24Step { // represents one step in a solution
  Operation operator;
  double x, y; //operands
  double value; //the value of the step (x operator y)
  public Challenge24Step (Operation operator, double x, double y) {
    this.operator = operator;
    // constructor code;
    }
  public String toString () {
    return String.format("%s %s %s = %s", this.x, this.operator.token, this.y,
                         this.value);
  }
}

问题是它仍然从操作类获取令牌:“null”

我知道这可能是因为运算符被声明为操作,但我不明白为什么它不经过标准继承:实例、类、每个超类

我将如何重新排列脚本以便使用更具体的操作类的标记?


你不能使tokenstatic 在基类中,因为这样每个继承的类都会有一个标记。您需要将其设为实例变量。你甚至不能把它放在静态方法中,因为staticJava 中的方法是不可重写的。

在 Java 中,变量是不可重写的。如果继承一个类并添加同名变量,则派生类中的变量将hide, not override基类中的一个。

要解决此问题,请使token an abstract基类中的方法,在派生类中提供实现,并返回所需的值。如果这样做,您可以用接口替换抽象类,因为其中不会有变量或实现:

interface Operation { // Basic operation class
    String getToken();
    double operate (double x, double y);
}
class AddOp implements Operation {
    public String getToken() {return "+"; }
    public double operate (double x, double y) {
        return x+y;
    }
}

或者,将其保留在基类中未分配,添加一个采用令牌值的构造函数,然后在那里分配它:

abstract class Operation { // Basic operation class
    public final String token;
    abstract public double operate (double x, double y);
    protected Operation(String token) {this.token = token; }
}
class AddOp extends Operation {
    public AddOp() { super("+"); }
    public double operate (double x, double y) {
        return x+y;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解类变量的继承 的相关文章

随机推荐

  • PHP批量插入foreach

    我有一个curl 脚本 它从远程源读取数据 以下是当前代码 function download page path ch curl init curl setopt ch CURLOPT URL path curl setopt ch CU
  • eclipse插件打开后如何执行操作

    我有一个 Eclipse 插件 我想在该插件内执行某些操作 但在 Eclipse 应用程序打开后 我尝试通过覆盖来做到这一点 public void postWindowCreate 但启动应用程序时我似乎无法进入该函数 有任何想法吗 你用
  • 我可以强制我的应用程序启动默认相机而不是提供“完整操作使用”列表吗?

    我正在使用意图新意图 MediaStore ACTION IMAGE CAPTURE 捕获图像以在我的应用程序中使用 我的设备上安装了两个可以执行此功能的应用程序 但希望我的应用程序仅使用默认摄像头 有办法做到这一点吗 正如 Dr sull
  • 配置 ServiceStack.Text 以引发无效 JSON

    尝试反序列化无效 JSON 时是否可以使 ServiceStack Text 库抛出异常 默认情况下 无效的 JSON 看起来会被忽略 因此结果对象包含 null 值 当我尝试反序列化这个 json 时 MongoConnectionStr
  • 在 Android 中使用 BitmapFactory.decodeStream() 从缓存加载图像

    UPDATES 即使我不从缓存中检索图像 我也尝试通过 Drawable 进行检索 其中我将所有 18 个图像存储在 drawable mdpi 文件夹中 仍然显示空白屏幕 我能够从服务器检索图像并将图像 GIF 保存到缓存中 但是 当我需
  • 带有 boost 变体的递归 using 声明

    我试图表示一个树状递归数据结构 其中每个节点可能是两种不同数据类型之一 我使用 boost 变体来 容纳 每个节点上可能存在的两种类型 但是 我遇到了一个问题 我严格使用 using 指令声明所有这些类型 因此当我了解节点的递归性质时 它会
  • 将参数传递给exe

    我有很多场景需要将参数传递给命令行执行程序 我在这个网站上看到了一些在某种程度上得到了回答 但到目前为止我还没有看到关于 powershell 如何处理参数的可靠的 通用的描述 两者都是通过 cmd 或启动进程传递的 这是一个让我烦恼的小例
  • 如何从输入数据集中删除非数字列?

    例如 如果我想考虑一种花的种类 花瓣数量 发芽时间和用户ID 用户ID那里会有一个连字符 所以在我的数据分析中 我不想使用它 我知道我可以对其进行硬编码 但我想让它在我输入任何数据集时 它会自动删除列non numeric inputs 编
  • (Angular 单元测试)如何在 Jasmin 中模拟输入属性?

    我目前正在尝试模拟 Angular 单元测试的输入属性 不幸的是 我无法进一步并反复收到以下错误消息 类型错误 无法读取未定义的属性 数据 我的 HTML 模板如下所示 div class container fluid div class
  • C++隐式转换序列中的三种转换

    页面位于http en cppreference com w cpp language implicit cast声明在隐式转换序列中最多可以完成三个转换序列 隐式转换序列按以下顺序包含以下内容 零个或一个标准转换序列 零个或一个用户定义的
  • LINQ to SQL SubmitChanges() 进度

    我正在使用 LINQ to SQL 将旧的 DBF 文件导入 MSSQL 我正在读取所有行并将它们添加到数据库中ctx MyTable InsertOnSubmit row 读取阶段完成后 我有大约 100 000 个待处理插入 ctx S
  • System.IO.File.ReadAllBytes 对于大于 2GB 的文件

    我有一个大文件 需要将其复制到内存中以供进一步处理 该软件对于小于 2GB 的文件运行良好 但一旦超过此限制 我就会得到一个例外 即 ReadAllBytes 仅支持小于 2GB 的文件 byte buffer System IO File
  • ClearCase:是否可以选择性地交付或变基?

    当将流A传递到流B时 是否可以只将选定的元素 准确地说是目录 从A传递到B 当从基线 B 变基流 A 时 是否可以仅将所选元素 准确地说是目录 从 B 变基到 A 使用 ClearCase UCM 您正在交付的是基线或活动 您正在重新设定的
  • HERE 地图 Android 集成,MISSING_LIBRARIES 错误

    我按照步骤操作https developer here com mobile sdks documentation android topics app simple android studio html 但我收到错误 无法初始化地图片段
  • 将文本字符 ☢ 在圆圈内垂直和水平居中 (CSS)

    我正在尝试将此文本字符 置于圆圈内 虽然 IE 10 显示文本垂直和水平居中 但 Chrome 和 Firefox 在顶部呈现过多的填充 任何想法如何解决这一问题 Flexbox 不是必须具备的 HTML div class tl icon
  • 更新 IPython/Jupyter 中使用的 R

    我想在 Jupyter Notebook 中使用 R 因此我通过 R Essentials 安装 请参阅 https www continuum io blog developer jupyter and conda r 安装的版本如下 R
  • 如何知道安装何时完成

    我正在创建一个应用程序来安装从服务器下载的应用程序 我想安装这些应用程序 下载文件后 我用于安装的方法的代码位于此处 public void Install String name prompts user to accept any in
  • 这段代码中 malloc 做了什么?

    你能解释一下下面的代码吗 str char malloc sizeof char num 1 什么是malloc在这里做什么 Why is num 1 used malloc是一个函数在堆上分配一块内存并返回一个pointer到它 它类似于
  • jQuery .append() 函数

    Why this mydiv append ul mydiv append li Hello li mydiv append ul alert mydiv html produces ul ul li Hello li and not ul
  • 理解类变量的继承

    我正在建造一个Challenge24SolverJava 中的类 逻辑本身起作用并找到预期的解决方案 具有任意数量的参数 无论如何 这部分项目正在按我的预期进行 这个问题来自于解决方案的表示问题 可以公平地说 我已经用 Python 完成了