# AI交互记录 ## 项目概述 定义一个shape类(draw方法),子类circle,rectangle重写draw.编写一个方法重写drawshape(shape s),调用其draw方法,并在main中测试 ## 开发步骤 ### 1. 创建抽象基类 Shape **需求**: 定义图形的公共行为 - 抽象方法 `getArea()`: 计算面积 - 抽象方法 `draw()`: 绘制图形 **实现要点**: - 使用 `abstract` 关键字声明抽象类 - 两个抽象方法由子类强制实现 ### 2. 实现 Rectangle 类 **需求**: 继承Shape,实现矩形功能 - 私有属性: `length`(长), `width`(宽) - 构造方法初始化长和宽 - 实现 `getArea()`: 返回 `length * width` - 实现 `draw()`: 输出矩形信息 **关键代码**: public class Rectangle extends Shape { @Override public double getArea() { return length * width; } @Override public void draw() { System.out.println("正在绘制一个矩形,长:" + length + ",宽:" + width); } } ### 3. 实现 Circle 类 **需求**: 继承Shape,实现圆形功能 - 私有属性: `radius`(半径) - 构造方法初始化半径 - 实现 `getArea()`: 返回 `Math.PI * radius * radius` - 实现 `draw()`: 输出圆形信息 **注意**: Circle.java初始为空类,需补充完整实现 ### 4. 创建测试类 TestDrawShape **需求**: 演示多态性的三种调用方式 **测试场景**: 1. **直接调用**: 通过子类对象直接调用draw() 2. **方法传参**: 通过drawShape(Shape s)方法体现多态 3. **父类引用**: 使用 `Shape shape = new Circle()` 形式 **核心方法**: public class Rectangle extends Shape { @Override public double getArea() { return length * width; } @Override public void draw() { System.out.println("正在绘制一个矩形,长:" + length + ",宽:" + width); } } ## 多态性体现 ### 编译时 vs 运行时 - **编译时**: 编译器检查Shape类型是否有draw()方法 - **运行时**: JVM根据实际对象类型调用对应子类的draw() ### 优势 1. **扩展性**: 新增图形只需继承Shape,无需修改drawShape方法 2. **统一接口**: 所有图形通过相同方式调用 3. **代码复用**: 通用逻辑集中在父类引用中