编写一个抽象类Shape
1、按照要求使用Java进行编码。 1) 编写一个抽象类Shape,其中有抽象方法getArea()和getPerimeter() 2) 在Shape类的基础上派生出Rectangle和Circle类,二者都实现了计算面积的方法getArea()和计算周长的方法getPerimeter(); 3) 构造main函数,生成Rectangle和Circle对象,并用Shape类型的变量调用Rectangle和Circle对象的getArea()和getPerim()方法。 在这个实验中,我们探讨了如何使用Java编程语言来创建和使用抽象类以及继承的概念。抽象类Shape被设计为一个基础类,它定义了两个抽象方法:`getArea()` 和 `getPerimeter()`,用于计算形状的面积和周长。抽象方法在Java中是没有具体实现的,它们必须由派生类来实现。 我们创建了一个名为`Rectangle`的类,它扩展了`Shape`抽象类。`Rectangle`类具有两个私有成员变量,即宽度`width`和高度`height`,以及相应的getter和setter方法。`Rectangle`类覆盖了`Shape`类中的`getArea()`和`getPerimeter()`方法,分别计算矩形的面积(宽度乘以高度)和周长(2倍的宽度加2倍的高度)。 接着,我们创建了另一个派生类`Circle`,同样也扩展了`Shape`。`Circle`类包含一个表示半径的私有变量`radio`,并提供了获取和设置半径的getter和setter方法。`Circle`类覆盖了`getArea()`方法,使用圆的面积公式πr²来计算面积,而`getPerimeter()`方法则根据周长公式2πr计算圆的周长。 在主程序`test`类中,我们通过`main`方法来测试这些类的功能。我们创建了一个`Rectangle`对象`r`,设置了其高度和宽度,然后创建了一个`Circle`对象`c`,设置了其半径。接下来,我们声明了一个`Shape`类型的变量`shape1`,并将其先赋值为`Rectangle`对象,再赋值为`Circle`对象。这样,我们就可以通过`shape1`调用`Rectangle`和`Circle`对象的`getArea()`和`getPerimeter()`方法,而无需关心它的具体类型。这展示了Java的多态特性,即同一类型的引用可以指向不同类型的实例,只要这些实例之间存在继承关系。 总结一下,这个实验涉及了以下几个Java编程的关键概念: 1. **抽象类**:`Shape`是一个抽象类,它包含抽象方法但不能直接实例化。 2. **继承**:`Rectangle`和`Circle`类都继承自`Shape`,并实现了抽象方法。 3. **抽象方法**:`getArea()`和`getPerimeter()`是`Shape`类的抽象方法,没有具体实现,需要子类去完成。 4. **覆盖(Override)**:`Rectangle`和`Circle`类通过`@Override`注解覆盖了父类的抽象方法。 5. **封装**:使用私有成员变量和公共getter/setter方法来封装数据。 6. **多态**:`Shape`类型的变量`shape1`可以引用`Rectangle`或`Circle`对象,体现了多态的灵活性。 7. **主程序测试**:`main`方法用于验证`Rectangle`和`Circle`类的正确实现。 通过这个实验,我们可以更深入地理解面向对象编程中的核心概念,并学习如何在实际应用中利用这些概念。