【问题标题】:Changing inherited parameters from super to sub class将继承的参数从超类更改为子类
【发布时间】:2020-02-08 12:10:19
【问题描述】:

我有一个关于医生和处方的任务。在其中一个类中,我不应该在构造函数(子类)中使用 int reit,就像超类一样。作业中的提示是 int reit 应始终在开处方时从 3 开始(一个人可以使用多少次处方)。我应该如何将其从 int reit 更改为 3(正如我从课堂上一位讲师的暗示中理解的那样)。

一切都在挪威,因为我们不得不这样做,希望没关系。 感谢您的帮助!

这是第一堂课:

public abstract class Resept {

  protected int id = 0;
  protected static int teller = 1;
  protected int pasientID = 0;
  protected int reit = 0;
  protected Legemiddel legemiddel;
  protected Lege utskrivendeLege;

  public Resept(Legemiddel legemiddel, Lege utskrivendeLege, int pasientID, int reit) {
    this.legemiddel = legemiddel;
    this.utskrivendeLege = utskrivendeLege;
    this.id = teller;
    this.reit = reit;
    this.pasientID = pasientID;
  }
}

这是下一个:

public class HvitResept extends Resept {

  public HvitResept(Legemiddel legemiddel, Lege utskrivendeLege, int pasientID, int reit) {
    super(legemiddel, utskrivendeLege, pasientID, reit);
  }
}

在下一个类中,我们不应该在构造函数中编写 int reit。 Reit 始终为 3,带有新的 P-reept(节育处方)。

public class PResept extends HvitResept {

  public PResept(Legemiddel legemiddel, Lege utskrivendeLege, int pasientID, **int reit**) {
    super(legemiddel, utskrivendeLege, pasientID, reit);
  }
}

【问题讨论】:

  • 在构造函数中,您可以将其设置为等于 3。然后有一个设置器在需要时更改该值。或者只是不要在构造函数中设置它并在类中让它等于 3。
  • 只是不要将 int reit 添加到 PResept 构造函数中,而是用 3 而不是 reit 调用 super
  • 当从构造函数中移除 int reit,并在 super(...) 中添加 3;我仍然收到一条错误消息:Required: Legemiddel, Lege, int, int, 并且实际参数列表和形式参数列表的长度不同。
  • 无论谁是产品/项目经理或客户,请告诉他们将源代码保持在非英语语法中是非常糟糕的。源代码的可维护性、支持和国际化——忘记这一切吧。
  • 我认为他们想要挪威语,这样我们就可以根据我们给所有东西的名称完全理解我们在做什么。但是我们的课本是英文的,所以是的.. 有时有点令人沮丧。

标签: java inheritance constructor subclass


【解决方案1】:
public class PResept extends HvitResept {

  public PResept(Legemiddel legemiddel, Lege utskrivendeLege, int pasientID) {
    super(legemiddel, utskrivendeLege, pasientID, 3);
  }
}

您可以使用您想要的值致电super(...);。 super 会调用其父类的构造函数。

【讨论】:

  • 我仍然收到一条错误消息:HvitResept 类中的构造函数 HvitResept 无法应用于给定类型;公共类 PResept 扩展 HvitResept { 必需:Legemiddel,Lege,int,int 找到:没有参数原因:实际和正式的参数列表长度不同
  • 似乎我的文件保存在错误的文件夹中。感谢您的帮助!
【解决方案2】:
public class PResept extends HvitResept {
  private static final int reit = 3;
  public PResept(Legemiddel legemiddel, Lege utskrivendeLege, int pasientID) {
    super(legemiddel, utskrivendeLege, pasientID, reit);
  }
}

每次创建PResept类型的新对象时,将这个变量声明为private static和final不会占用,并且由于final,值也不能更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2017-05-28
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多