我是 Java 的初学者,我使用过 PHP、C++ 和 Lua,从来没有遇到过这个问题,我做了两个类只是为了锻炼Facto
,MyFacto
第一个确实找到了一个阶乘,第二个应该找到阶乘,而不是通过添加,而是通过倍增。不要因为愚蠢和毫无意义的代码而责备我,我只是在测试并试图掌握 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());
}
}
事实.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()
未被覆盖的方法有关吗?它使用了类中的run()
方法Facto
?我该如何解决这个问题或覆盖这样的事情的正确方法是什么?