public class Counter{
private int value;
public int getValue(){
return value;
}
public void setValue (int value){
this.value = value;
}
public void increment() {
/* */
}
public void decrement() {
/* */
}
}
public class LoopingCounter extends Counter{
private int limit;
public LoopingCounter(int limit){
this.limit = limit;
}
public void increment(){
int value = super.getValue();
if(value == limit){
System.out.println("Value has reached the limit, cannot increment any further!");
setValue(0);
} else{
value++;
setValue(value);
}
}
public void decrement(){
int value = super.getValue();
if(value == limit){
System.out.println("Value has reached the limit, cannot decrement any further!");
} else{
value--;
setValue(value);
}
}
public int getValue() {
System.out.println("override");
return 1000;
}
}
public class CounterTest{
public static void main(String[] args){
LoopingCounter lc = new LoopingCounter(100);
for(int i=0; i<150; i++){
lc.increment();
System.out.println(lc.getValue());
}
}
}
在這種情況下,LoopingCounter應該觸發Counter類中的getValue
方法。但由於某些原因,當我運行它時,它會繼續使用它自己的getValue
方法。java super沒有按預期工作
請幫我理解爲什麼我不能用這種方法調用父方法。
道歉:
我現在看到我的錯誤。我道歉。我沒有意識到lc.getValue()並且感到困惑,爲什麼lc.increment未能正確調用super.getValue()。在SO發佈之前,故事的士氣是充足的睡眠。 -_-」
這樣的東西已經回答了,看看這裏:http://stackoverflow.com/questions/1032847/can-java-call-parent-overridden-method-in-other-objects-but-not-subtype – Xavjer
'LoopingCounter'定義了它自己的'getValue()'方法。如果你不希望它被引用,你想達到什麼目的? – NilsH
我們是否在討論'super.getValue()'在'increment'和'decrement'方法中不工作或者'lc.getValue()'不在'CounterTest'類中工作的調用?如果是後者,那麼它「不按預期工作」,因爲你不明白它是如何工作的。 –