java进程继承
我有两个类,Progression和FibonacciProgression,但是当在4和6上调用print方法时,FibonacciProgression打印出一些意外的结果,如下所示。有人能解释为什么会这样吗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
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);
}