5 changed files with 97 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||
|
AI 协助明确本次 Java 编程任务核心要求,即通过抽象类、继承与多态实现图形面积统一计算与输出。 |
||||
|
AI 提供完整可运行代码,包括抽象类Shape、Circle/Rectangle/Triangle子类、工具类ShapeUtil及测试类,规范代码结构。 |
||||
|
AI 补充空值判断、格式化输出等细节,提升代码健壮性与可读性。 |
||||
|
AI 协助生成实验报告框架、类图、组合与继承对比分析内容。 |
||||
|
AI 对面向对象相关知识点进行讲解,帮助理解多态、继承等核心原理。 |
||||
@ -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); |
||||
|
} |
||||
|
} |
||||
@ -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()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,18 @@ |
|||||
|
继承(本次实验使用方式) |
||||
|
优点: |
||||
|
代码复用:子类自动继承父类的抽象方法约束,统一接口。 |
||||
|
多态支持:父类引用指向子类对象,实现统一处理(如 ShapeUtil.printArea)。 |
||||
|
结构清晰:符合 “is-a” 关系(圆形是一种图形、矩形是一种图形)。 |
||||
|
缺点: |
||||
|
耦合度高:子类与父类强绑定,父类修改会影响所有子类。 |
||||
|
无法多继承:Java 中一个类只能继承一个父类,扩展性受限。 |
||||
|
破坏封装:子类可能过度依赖父类的内部实现。 |
||||
|
2. 组合 |
||||
|
定义:通过 “包含” 其他类的实例来实现功能,符合 “has-a” 关系(如图形包含颜色、位置等属性类)。 |
||||
|
优点: |
||||
|
低耦合:类之间通过接口交互,修改内部实现不影响调用方。 |
||||
|
灵活性高:可动态组合多个对象,实现更复杂的功能。 |
||||
|
符合 “合成复用原则”:优先使用组合而非继承。 |
||||
|
缺点: |
||||
|
代码量稍多:需要手动创建对象引用并委托调用。 |
||||
|
不直接支持多态的 “is-a” 语义表达。 |
||||
Loading…
Reference in new issue