diff --git a/w5/AI协助记录 b/w5/AI协助记录 new file mode 100644 index 0000000..a5e03d8 --- /dev/null +++ b/w5/AI协助记录 @@ -0,0 +1,5 @@ +AI 协助明确本次 Java 编程任务核心要求,即通过抽象类、继承与多态实现图形面积统一计算与输出。 +AI 提供完整可运行代码,包括抽象类Shape、Circle/Rectangle/Triangle子类、工具类ShapeUtil及测试类,规范代码结构。 +AI 补充空值判断、格式化输出等细节,提升代码健壮性与可读性。 +AI 协助生成实验报告框架、类图、组合与继承对比分析内容。 +AI 对面向对象相关知识点进行讲解,帮助理解多态、继承等核心原理。 \ No newline at end of file diff --git a/w5/Main.java b/w5/Main.java new file mode 100644 index 0000000..90595af --- /dev/null +++ b/w5/Main.java @@ -0,0 +1,13 @@ +public class Main { + public static void main(String[] args) { + // 创建图形对象 + Shape circle = new Circle(3); + Shape rectangle = new Rectangle(4, 5); + Shape triangle = new Triangle(6, 8); + + // 统一计算并打印面积 + ShapeUtil.printArea(circle); + ShapeUtil.printArea(rectangle); + ShapeUtil.printArea(triangle); + } +} diff --git a/w5/Shape.java b/w5/Shape.java new file mode 100644 index 0000000..f557c06 --- /dev/null +++ b/w5/Shape.java @@ -0,0 +1,61 @@ + + abstract class Shape { + public abstract double getArea(); + } + + // 圆形 + class Circle extends Shape { + private double radius; + + public Circle(double radius) { + this.radius = radius; + } + + @Override + public double getArea() { + return Math.PI * radius * radius; + } + } + + // 矩形 + class Rectangle extends Shape { + private double length; + private double width; + + public Rectangle(double length, double width) { + this.length = length; + this.width = width; + } + + @Override + public double getArea() { + return length * width; + } + } + + // 三角形 + class Triangle extends Shape { + private double base; + private double height; + + public Triangle(double base, double height) { + this.base = base; + this.height = height; + } + + @Override + public double getArea() { + return 0.5 * base * height; + } + } + + // 工具类 + class ShapeUtil { + public static void printArea(Shape shape) { + System.out.println("图形面积:" + shape.getArea()); + } + } + + + + diff --git a/w5/实验报告 b/w5/实验报告 new file mode 100644 index 0000000..e69de29 diff --git a/w5/组合vs继承 b/w5/组合vs继承 new file mode 100644 index 0000000..245983b --- /dev/null +++ b/w5/组合vs继承 @@ -0,0 +1,18 @@ +继承(本次实验使用方式) +优点: +代码复用:子类自动继承父类的抽象方法约束,统一接口。 +多态支持:父类引用指向子类对象,实现统一处理(如 ShapeUtil.printArea)。 +结构清晰:符合 “is-a” 关系(圆形是一种图形、矩形是一种图形)。 +缺点: +耦合度高:子类与父类强绑定,父类修改会影响所有子类。 +无法多继承:Java 中一个类只能继承一个父类,扩展性受限。 +破坏封装:子类可能过度依赖父类的内部实现。 +2. 组合 +定义:通过 “包含” 其他类的实例来实现功能,符合 “has-a” 关系(如图形包含颜色、位置等属性类)。 +优点: +低耦合:类之间通过接口交互,修改内部实现不影响调用方。 +灵活性高:可动态组合多个对象,实现更复杂的功能。 +符合 “合成复用原则”:优先使用组合而非继承。 +缺点: +代码量稍多:需要手动创建对象引用并委托调用。 +不直接支持多态的 “is-a” 语义表达。 \ No newline at end of file