java进程继承

java进程继承,java,inheritance,Java,Inheritance,我有两个类,Progression和FibonacciProgression,但是当在4和6上调用print方法时,FibonacciProgression打印出一些意外的结果,如下所示。有人能解释为什么会这样吗 public class Progression { protected long first; protected long cur; Progression() { cur = first = 0; } protecte

我有两个类,Progression和FibonacciProgression,但是当在4和6上调用print方法时,FibonacciProgression打印出一些意外的结果,如下所示。有人能解释为什么会这样吗

public class Progression {

    protected long first;
    protected long cur;

    Progression() {
        cur = first = 0;
    }

    protected long firstValue() {
        cur = first;
        return cur;
    }

    protected long nextValue() {
        return ++cur;
    }

    public void printProgression(int n) {
        System.out.print(firstValue());
        for (int i = 2; i <= n; i++) {
            System.out.print(" " + nextValue());
        }
        System.out.println();
    }

    public static void main (String[] args) {
        Progression prog = new Progression();
        System.out.println("Default Progression: ");
        prog.printProgression(10);
    }

}

使用参数6第二次调用
printProgression
时,
prev
的值不会重置为其初始值
prev
仍然包含上次调用的值7。调用
FibonacciProgression
firstValue
时,需要在
FibonacciProgression
中保存
value2
,并重置
prev
。像这样:

protected long firstValue() {
    prev = val2 - first;  // val2 is value2 passed in constructor
    return super.firstValue();
}
您的printProgression“破坏”了上一个值。 若要轻松查看,请将main切换到:

public static void main(String[] args) {
    Progression fibProg = new FibonacciProgression(2, 5);
    System.out.println("Default Progression: ");
    fibProg.printProgression(4);
    fibProg = new FibonacciProgression(2, 5);
    fibProg.printProgression(6);
}

他们给出了不同的结果:25712和291112051。所以我想知道为什么第二个不象第一个那样开始呢?它不会破坏
cur
cur
在调用
firstValue()
时被重置为初始值。只有
prev
被销毁。“cur”被销毁,直到它被重置,这很好。我想这主要是用词上的选择。但你当然是对的。@mark方法的一般问题是,他试图进行类似fib的计算,但只保存/使用一个值(在本例中为第一个值)——当序列依赖于两个值并由两个值决定时。
public static void main(String[] args) {
    Progression fibProg = new FibonacciProgression(2, 5);
    System.out.println("Default Progression: ");
    fibProg.printProgression(4);
    fibProg = new FibonacciProgression(2, 5);
    fibProg.printProgression(6);
}