3. 定义一个类SA,该类有一个方法f():public int f(int 1,int b),该方法返回a和b的最大值。再定义该类的子类SB,要求子类重写父类的方法f,重写的方法将返回a和b的最小公倍数。 要求在重写的方法的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回。要求在测试程序中分别使用父类和子类创建对象,并分别调用方法f计算两个正整数的最大公约数和最小公倍数。
时间: 2024-02-23 22:02:44 浏览: 17
可以这样实现:
```java
public class SA {
public int f(int a, int b) {
return Math.max(a, b);
}
}
public class SB extends SA {
public int f(int a, int b) {
int m = gcd(a, b);
return a * b / m;
}
private int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
}
public class Test {
public static void main(String[] args) {
SA sa = new SA();
System.out.println(sa.f(12, 18)); // 输出18
SB sb = new SB();
System.out.println(sb.f(12, 18)); // 输出36
}
}
```
在父类 SA 中,方法 f 返回 a 和 b 的最大值;在子类 SB 中,方法 f 重写了父类的方法 f,首先调用了一个私有方法 gcd,返回 a 和 b 的最大公约数,然后返回 a 和 b 的最小公倍数。在测试程序中,分别使用父类和子类创建对象,并分别调用方法 f 计算两个正整数的最大公约数和最小公倍数。