编写一个类,该类有一个方法public int f(int a,int b), 该方法返回a和b的最大公约数。然后再编写一个该类的子类, 要求子类重写方法f,而且重写的方法将返回a和b的最小公倍数。 要求在重写的方法体中首先调用被隐藏的方法返回a和b的最大公约数m, 然后将乘积(a*b)/m返回。要求在应用程序的主类中分别使用父类和子类创建对象, 并分别调用方法f计算两个正整数的最大公约数和最小公倍数。
时间: 2023-07-15 12:15:05 浏览: 315
可以按照以下方式编写类和子类:
```java
public class MathUtil {
public int f(int a, int b) {
// 求最大公约数
int m = gcd(a, b);
return m;
}
private int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
}
public class MathUtilSub extends MathUtil {
@Override
public int f(int a, int b) {
// 调用父类的方法求最大公约数
int m = super.f(a, b);
// 求最小公倍数
int n = a * b / m;
return n;
}
}
```
在主类中可以这样使用:
```java
public class Main {
public static void main(String[] args) {
MathUtil mu = new MathUtil();
int a = 12;
int b = 18;
int m = mu.f(a, b);
System.out.println("最大公约数:" + m);
MathUtilSub mus = new MathUtilSub();
int n = mus.f(a, b);
System.out.println("最小公倍数:" + n);
}
}
```
输出结果为:
```
最大公约数:6
最小公倍数:36
```
可以看到,父类的方法返回了a和b的最大公约数,而子类重写的方法返回了a和b的最小公倍数,实现了题目要求的功能。
阅读全文