【问题标题】:extending a class with an extra parameter用一个额外的参数扩展一个类
【发布时间】:2012-11-26 14:41:43
【问题描述】:

我有一个简单的问题。我有一门课,我用它来在 2 年内拆分一个字符串:

public class Period {

    int firstYear;
    int secondYear;

    Period () {

    }

    Period(String periode) {

        String [] periodeSplit = periode.split("-");
        this.firstYear = Integer.parseInt(periodeSplit[0]);
        this.secondYear = Integer.parseInt(periodeSplit[1]);
    }

    public String toString() {

        return  "Firstyear: " + this.firstYear + "\n" + "Secondyear: " + this.secondYear;
    }
}

我现在想扩展这个类,不是将数据分成 2 个不同的整数,而是分成 3 个不同的整数。因此,除了 2 个已经存在的整数变量之外,我还想要一个额外的。最简单的方法是什么?

感谢您的帮助!

亲切的问候,

基普特斯克里迪

【问题讨论】:

  • 你了解你的代码是如何工作的吗?如果是这样,我认为您可以回答自己的问题。
  • 我不太习惯这种编程,我宁愿使用另一个类,但对于这个任务我需要这样做。即使我用另一个 int 扩展类,我也有点困惑。前 2 个整数会发生什么。他们可以在这个类中调用吗?

标签: java class constructor extends


【解决方案1】:

当您扩展类时,首先将其拆分为两个变量,一个与您当前的代码不同,然后是您当前的代码可以处理的一个。

然后只需拨打super(periode)

子类将可以访问父变量,因为您将它们设为默认值。

【讨论】:

  • 所以在调用扩展类时,在这种情况下是 Date 类,我会先将参数传递给解析前 2 个字符串的 Super(parent) 类,然后将其传递给子类?
  • 不,将其拆分为您的子类将处理的内容和父类将处理的内容,然后在父类将处理的字符串上调用 super(periode)。
  • 因此,例如,如果我将一个字符串传递给超级,超级只有 2 个可以访问的变量,有没有办法访问超级中的第三个拆分字符串?简而言之:将可以拆分 3 次的东西传递给 super,然后在子节点中填充一个 var,最后从字符串中拆分出来。
  • 您不能在父类中使用子变量,除非您指定父类的所有子代都必须具有该变量,这与您尝试做的事情背道而驰。但是,您可以使用 super.firstyear; 访问父变量,甚至可以调用 super.toString()
【解决方案2】:

我不会只添加新的一年。

为什么不让整个东西足够通用,以便它支持你需要的任何拆分。

public class Period {

    String [] periodeSplit;


    Period(String periode) {

        periodeSplit = periode.split("-");

    }

    public String toString() {

       //TODO : Iterate and print.
    }
}

【讨论】:

  • 我能做到。但是考虑到类需要不同的 toString 方法这一事实,实际上是年份,而其他的是日期。所以我宁愿扩展一个拆分年份的方法,只覆盖子类的 toString 方法。
【解决方案3】:

我认为创建更通用的类会更好(也很容易),它能够处理你传递给它的任何年数:

public class Period {

    int[] years;

    Period() {

    }

    Period(String periode) {

        String[] periodeSplit = periode.split("-");
        years = new int[periodeSplit.length];
        for (int i = 0; i < periodeSplit.length; i++) {
            years[i] = Integer.parseInt(periodeSplit[i]);
        }
    }

    public String toString() {
        String result = "";
        for (int i = 0; i < years.length; i++) {
            result += "Year " + i + ":" + years[i] + "\n";
        }
        return result;
    }
}

如果原来的类真的需要扩展,可以这样做:

class ExtendedPeriod extends Period {
    int thirdPart;

    ExtendedPeriod(String periode) {
        String[] periodeSplit = periode.split("-");
        this.firstYear = Integer.parseInt(periodeSplit[0]);
        this.secondYear = Integer.parseInt(periodeSplit[1]);
        this.thirdPart = Integer.parseInt(periodeSplit[1]);
    }

    public String toString() {
        return "Day: " + this.firstYear + "\n" + "Month: " + this.secondYear
                + "\nYear: " + this.thirdPart;
    }
}

我建议将变量名称“firstYear”和“secondYear”更改为不同的名称,例如“firstPart”、“secondPart”,因为对于 extendedPeriod,它们不再是年份(我将它们留在我的代码中,因此它可以编译你的,但将新的 int 称为“thirdPart”)。我不觉得这是继承的最佳用途,但如果这是需要的话。我还想像这样重用 Period 中的 toString:

public String toString2() {
        return super.toString() + "\nThird part: " + this.thirdPart;
    }

但要让它有意义,您必须在 Period 中更改 toString 方法,而不是调用值“年”。

【讨论】:

  • 没错,问题是我只对拆分部分感兴趣。我传递的第一个数据是几年,例如:1980-2020。我传递的第二个数据是日期:17-10-1978。除此之外,老师希望我使用扩展课程:(
猜你喜欢
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
相关资源
最近更新 更多