我是一名Java初學者,我使用PHP,C++和Lua,並且從來沒有遇到過這個問題,我只爲了運動的緣故做了兩個類Facto
和MyFacto
,第一個確實找到了階乘,第二個應該通過增加而不是通過乘法來找到階乘。不要責怪我愚蠢和毫無意義的代碼,我只是測試並試圖獲得Java的竅門。java覆蓋不工作
主營:
public class HelloWorld {
public static void main(String[] args) {
Facto fc = new Facto(5);
fc.calc();
System.out.println(fc.get());
MyFacto mfc = new MyFacto(5);
mfc.calc();
System.out.println(mfc.get());
}
}
Facto.java:
public class Facto {
private int i;
private int res;
public Facto(int i) {
this.i = i;
}
public void set(int i) {
this.i = i;
}
public int get() {
return this.res;
}
public void calc() {
this.res = this.run(this.i);
}
private int run(int x) {
int temp = 0;
if(x>0) {
temp = x + this.run(x-1);
}
return temp;
}
}
MyFacto.java:
public class MyFacto extends Facto {
public MyFacto(int i) {
super(i);
}
private int run(int x) {
int temp = 0;
if(x>0) {
temp = x * this.run(x-1);
}
return temp;
}
}
我想結果應該是15和120,但我得到15 15.爲什麼會發生?這與calc()
方法沒有被覆蓋有什麼關係,它使用Facto
類的run()
方法?我怎樣才能解決這個問題或者什麼是正確的方式來重寫這樣的事情?
在兩個類中將'private int run()'更改爲'protected int run()'。 –
@GregKopff究竟在'Facto'類還是'MyFacto'中?我改變了他們兩個,結果是15和0. –
,因爲0 *任何= 0.即你的覆蓋現在正常工作,工作邏輯。=) –