私はJavaの初心者で、PHP、C ++、Luaを使用しましたが、この問題は発生しませんでした。演習のためだけに2つのクラスを作成しましたFacto
。最初のクラスMyFacto
は階乗を検出し、2番目のクラスは階乗を追加するのではなくによって検出する必要があります。乗算。愚かで無意味なコードで私を責めないでください。私はただテストして、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()
メソッドがオーバーライドされておらず、クラスのrun()
メソッドを使用していることと関係がありますか?Facto
これを修正するにはどうすればよいですか、またはこのようなものをオーバーライドする正しい方法は何ですか?