java - 使用额外参数扩展类

标签 java class constructor extends

我有一个简单的问题。我有一个类,我用它来在 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 个已经存在的整数变量之外,我还想要一个额外的变量。最简单的方法是什么?

感谢您的帮助!

亲切的问候,

基普特·斯克里迪

最佳答案

我认为创建更通用的类会更好(而且很容易),该类将能够处理您传递给它的任何数量的年份:

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”,因为对于extendPeriod来说,它们不再是年(我将它们留在代码中,这样它就可以用你的,但将新的 int 称为“thirdPart”)。我不认为这是继承的最佳用途,但如果这是需要的话。我还想像这样重用Period中的toString:

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

但要使其有意义,您必须更改 period 中的 toString 方法,不要调用值“年”。<​​/p>

关于java - 使用额外参数扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13779705/

相关文章:

java - 如何将字符串中的所有数字移动到字符串的开头?

java - 在java中从ms access jdbcodbc查询数据库的正确语法是什么

java - 通过构造函数从用户获取输入时出现意外结果

c++ - 在使用相同名称的构造函数参数初始化成员变量时,=和{}之间的区别

java - Xuggle 和 red5 没有 red5 适配器

python - 覆盖字符串列表中属性的 getter 和 setter

java - 公共(public)类需要公共(public)成员(访问成员时)?

javascript - 用原型(prototype)封装 JavaScript

c++ - 是什么导致移动构造函数被删除

java - 使用 ant 脚本为我的所有项目自动增加 ivy 修订版