使用额外参数扩展类

时间:2012-12-08 17:05:41

标签: 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个不同的int而是3个不同的int。所以除了2个已经存在的整数变量之外,我想要一个额外的变量。这是最简单的方法吗?

感谢您的帮助!

亲切的问候,

Kipt Scriddy

3 个答案:

答案 0 :(得分:1)

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

然后只需致电super(periode)

子类可以访问父变量,因为它们是默认的。

答案 1 :(得分:1)

我不会延长到新的一年。

为什么不使整个事物足够通用,以便它支持你需要的任何分裂。

public class Period {

    String [] periodeSplit;


    Period(String periode) {

        periodeSplit = periode.split("-");

    }

    public String toString() {

       //TODO : Iterate and print.
    }
}

答案 2 :(得分:1)

我认为创建更通用的类会更好(而且非常简单),它可以处理你传递给它的任意年份:

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;
    }

但是为了让它有意义,你必须在句点中使用chagne toString方法来调用值'years'。