Java编程中在子类重载方法中调用父类中该方法时,该方法包含递归时出现的调用错误

来源:互联网 发布:gzip linux 编辑:程序博客网 时间:2024/05/29 04:26
下面是Java学习过程中的一道练习题,求两个数的最大公约数和最小公倍数,我编写的代码如下:
<span style="font-family: Arial, Helvetica, sans-serif;">package Test;</span>
/** * 计算最大公约数和最小公倍数 * @author Yifan * @version 1.0 */class Divisor{/** * 求最大公约数 * @param a * @param b 所求的两个数字 * @return 返回a和b的最大公约数 */int f(int a,int b){int temp;if(a==b)return a;else if(a<b){temp=a;a=b;b=temp;}temp=a%b;if(temp==0)return b;else{return f(b,temp);}}}//辗转相除法求最大公约数class Multiple extends Divisor{/** * 调用最大公约数的算法,计算最小公倍数 * @return 返回最小公倍数 */int f(int a,int b){/*int c,d;d = a*b;c = super.f(a,b);return d/c;*/  //该方法中的父类是个递归方法,在递归时会调用子类重写的方法Divisor Div = new Divisor();int c = Div.f(a, b);return (a*b)/c;}}//求最小公倍数public class Sum {/** * 主方法输出a和b的最大公约数和最小公倍数 * @param args 形参变量 */public static void main(String[] args){int a,b,divisor,multiple;a = 600;b = 1515;//待求的两个数Divisor Di = new Divisor();Multiple Mu = new Multiple();divisor = Di.f(a,b);multiple = Mu.f(a,b);System.out.println("最大公约数和最小公倍数分别是:"+divisor+","+multiple);}}
可以看到,Multiple类继承了Divisor类,重写并在重写的方法中调用父类的该递归方法时,导致父类在递归时并不是调用自己,而是调用子类的重载方法,导致计算最小公倍数计算错误。 目前解决的方法,我只想到以上代码中的一种方法,即在子类中创建父类的实例,用实例来调用父类的递归方法。欢迎大家提供其他解决该问题的好办法!!!
1 0
原创粉丝点击