java编写两个类,A和B,A创建的对象可以计算两个正整数的最大公约数,B创建的对象可以计算两个数的最小公倍数。要求:B类中有一个成员变量是用A类声明对象的。
时间: 2024-10-06 11:02:18 浏览: 32
在Java中,我们可以设计一个`AbstractMath`抽象类,作为A和B类的基础,然后让A类实现`calculateGCD`方法,而B类继承自`AbstractMath`并添加`calculateLCM`方法,并将A类的对象作为内部成员变量。以下是具体的代码示例:
```java
// 创建一个抽象类 AbstractMath,包含一个用于计算最大公约数的方法
abstract class AbstractMath {
private A gcdCalculator;
// 构造函数,在这里初始化gcdCalculator
public AbstractMath(A gcdCalculatorInstance) {
this.gcdCalculator = gcdCalculatorInstance;
}
// 提供一个抽象方法,用于计算最大公约数
abstract int calculateGCD(int num1, int num2);
// 获取gcdCalculator对象的方法
public A getGcdCalculator() {
return gcdCalculator;
}
}
// 类A,实现了calculateGCD方法
class A {
public int calculateGCD(int num1, int num2) {
// 实现实际的GCD算法,例如欧几里得算法
// 这里仅作示例,不展示完整代码
if (num2 == 0) {
return num1;
} else {
return gcdCalculator.calculateGCD(num2, num1 % num2);
}
}
}
// 类B,继承自AbstractMath并添加calculateLCM方法
class B extends AbstractMath {
public B(A gcdCalculatorInstance) {
super(gcdCalculatorInstance); // 继承抽象类的构造函数
}
// 计算最小公倍数的方法,依赖于A类提供的GCD
public int calculateLCM(int num1, int num2) {
int lcm = (num1 * num2) / gcdCalculator.calculateGCD(num1, num2);
return lcm;
}
}
// 使用示例
public static void main(String[] args) {
A a = new A();
B b = new B(a); // B类实例化时传入A类的对象
int num1 = 48, num2 = 18;
System.out.println("A类计算GCD: " + a.calculateGCD(num1, num2));
System.out.println("B类计算LCM: " + b.calculateLCM(num1, num2));
// 相关问题--
阅读全文