在Java编程语言中,类的继承是面向对象编程的一个核心概念。它允许创建一个新类(子类)作为现有类(父类)的扩展,从而重用和修改父类的属性和方法。在这个实验中,我们关注的是如何利用类的继承来实现求解两个整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的功能。
我们需要创建一个名为`Parent`的基本类,这个类将包含计算最大公约数的方法。在`Parent`类中定义两个整型变量`a`和`b`,以及另外两个辅助变量`m`和`t`。最大公约数的计算通常采用欧几里得算法,这个算法基于以下原理:对于任何两个正整数a和b,其最大公约数等于a除以b的余数r与b之间的最大公约数。因此,我们可以通过不断迭代这一过程,直到余数为0,此时的b即为最大公约数。在`Parent`类中,可以这样实现:
```java
class Parent {
int a = 0, b = 0, m, t;
public int f(int a, int b) {
this.a = a;
this.b = b;
while (b != 0) {
t = b;
b = a % b;
a = t;
}
return a; // 当b为0时,a就是最大公约数
}
}
```
接下来,我们创建一个子类,比如`Child`,并重写`f()`方法来计算最小公倍数。根据题目要求,重写的方法应首先调用父类中的`f()`方法获取最大公约数,然后通过公式`a * b / m`计算最小公倍数。因此,`Child`类的代码如下:
```java
class Child extends Parent {
@Override
public int f(int a, int b) {
int gcd = super.f(a, b);
return a * b / gcd; // 使用最大公约数计算最小公倍数
}
}
```
我们编写主类`Main`来测试这两个方法:
```java
public class Main {
public static void main(String[] args) {
Child child = new Child();
int num1 = 48, num2 = 72;
System.out.println("最大公约数: " + child.f(num1, num2));
System.out.println("最小公倍数: " + child.f(num1, num2));
}
}
```
运行这个程序,你将看到类似这样的输出:
```
最大公约数: 24
最小公倍数: 144
```
这个实验有助于加深对Java类继承的理解,以及如何使用`super`关键字来访问父类的方法。在实际编程中,类的继承可以提高代码的复用性,使得代码结构更加清晰,易于维护。同时,实验过程中遇到的调用错误问题,通过仔细分析和调试,能帮助我们更好地掌握Java的类和方法的使用规则。