Java面向对象实验:类的设计、构造方法重载与图形面积计算
✅ Java面向对象实验:类的设计、构造方法重载与图形面积计算
本文为一次 Java 面向对象实验的完整总结,通过编写 Student 类与 Area 类,我从构造方法、封装、属性管理到对象行为抽象上得到了多方面提升。文章包含代码、思维图、类图、避坑点与心得,适合学习 Java OOP 的同学参考。
📌 目录
-
一、实验目的
-
二、实验环境
-
三、实验内容
-
四、Student 类:构造方法与信息封装
- 4.1 UML 类图(ASCII 格式)
- 4.2 Student 完整代码
- 4.3 构造方法重载示意图
- 4.4 知识点拆解
-
五、Area 类:三角形与半圆面积封装
- 5.1 类设计思维图
- 5.2 完整代码
- 5.3 常见错误与避坑点
-
六、实验心得:从“写对代码”到“写好代码”
-
七、总结与扩展建议
一、实验目的
本实验围绕 Java 面向对象编程(OOP)进行,目标包括:
- 理解类与对象的设计思想
- 掌握构造方法(含重载)
- 学会通过方法封装对象行为
- 掌握 Java 类库(Calendar)的使用
- 使用 OOP 思维解决一个面积计算实际问题
二、实验环境
- JDK 1.8
- Eclipse
三、实验内容
✔ 编写 Student 类,实现构造方法重载、属性封装、自我介绍以及出生年份计算
✔ 编写 Area 类,封装三角形与半圆面积公式
✔ 使用面向对象思想分析类之间的属性与行为关系
四、Student 类:构造方法与信息封装
Student 类是整个实验的核心,涉及:
- 属性封装
- 构造方法重载
- 对象行为抽象
- Java 内置库调用
4.1 UML 类图(ASCII 格式)
+----------------------+
| Student |
+----------------------+
| - id : String |
| - name : String |
| - age : int |
| - address : String |
| - phone : String |
+----------------------+
| + Student() |
| + Student(id) |
| + Student(id,name) |
| + setAge() |
| + setAddress() |
| + setPhone() |
| + introduce() |
| + getBirthYear() |
+----------------------+
4.2 Student 完整代码(格式优化 + 注释清晰)
package xyt_1;import java.util.Calendar;class Student {// 定义属性(封装)private String id;private String name;private int age;private String address;private String phone;// 无参构造public Student() {System.out.println("无参构造方法被调用!");}// 单参构造public Student(String id) {this.id = id;System.out.println("单参数构造方法被调用!");}// 双参构造public Student(String id, String name) {this.id = id;this.name = name;System.out.println("双参数构造方法被调用!");}// 设置属性public void setAge(int age) { this.age = age; }public void setAddress(String address) { this.address = address; }public void setPhone(String phone) { this.phone = phone; }// 自我介绍方法public void introduce() {System.out.println("大家好!");System.out.println("学号:" + id);System.out.println("姓名:" + name);System.out.println("年龄:" + (age > 0 ? age + "岁" : "未填写"));System.out.println("住址:" + (address != null ? address : "未填写"));System.out.println("电话:" + (phone != null ? phone : "未填写"));}// 根据年龄计算出生年份public int getBirthYear() {int currentYear = Calendar.getInstance().get(Calendar.YEAR);return currentYear - age;}public static void main(String[] args) {Student stu1 = new Student("20231026121", "熊宇天");stu1.setAddress("湖北工业大学 工一 B204");stu1.setAge(20);stu1.setPhone("13307217057");stu1.introduce();System.out.println("出生年份:" + stu1.getBirthYear());}
}
4.3 构造方法重载示意图
Student()↑├─────────────── 默认初始化对象Student(id)↑├─────────────── 仅知道学号的场景Student(id, name)↑└─────────────── 已知学号与姓名的场景
构造方法重载让对象初始化更加灵活,是 OOP 的重要能力。
4.4 知识点拆解
✅ 1. 封装(Encapsulation)
属性设为 private,通过 set 方法修改,保证对象状态可控。
✅ 2. 构造方法(Constructor)
负责对象初始化,是 OOP 的入口。
✅ 3. 重载(Overload)
不同参数 → 不同的初始化方式
提高了代码可读性与扩展性。
✅ 4. 调用 Java 内置类库
使用 Calendar 获取当前年份:
Calendar.getInstance().get(Calendar.YEAR);
五、Area 类:三角形与半圆面积封装
Area 类用来展示如何将数学公式封装到对象行为中。
5.1 类设计思维图
Area
├── 属性
│ ├── bottom(底边)
│ ├── extend(高度)
│ ├── wide (宽度)
│ └── radius (半径 = bottom / 2)
│
├── 构造方法
│ └── 设置底边时同步更新半径
│
└── 方法├── areaTriangle()└── areaSemicircle()
5.2 完整代码
package xyt_1;public class Area {private float bottom;private float extend;private float wide;private float radius;public Area(float bottom, float extend, float wide) {this.bottom = bottom;this.extend = extend;this.wide = wide;radius = bottom / 2;}public void setBottom(float bottom) {this.bottom = bottom;radius = bottom / 2; // 保持数据一致性}public void setExtend(float extend) { this.extend = extend; }public void setWide(float wide) { this.wide = wide; }public float areaTriangle() {return wide * extend / 2;}public float areaSemicircle() {return radius * radius * 3.14f / 2;}public static void main(String[] args) {Area ex1 = new Area(5f, 4f, 3f);System.out.println("三角形面积:" + ex1.areaTriangle());System.out.println("半圆面积:" + ex1.areaSemicircle());}
}
5.3 常见错误与避坑点
❌ 错误:修改 bottom 后忘记更新 radius
✅ 正确做法:
radius = bottom / 2;
❌ 错误:硬编码 π 的值
建议改成:
Math.PI
六、实验心得:从“写对代码”到“写好代码”
本次实验让我真正理解了面向对象的三大关键点:
✅ 1. 构造方法的意义不仅是“初始化”
而是 提供不同创建对象方式的入口。
✅ 2. 属性之间存在关联性
例如:
radius依赖bottom- 必须保证对象内部状态的一致性
✅ 3. 方法封装是降低耦合的关键
修改面积计算只需改一个方法,不会影响其他代码。
✅ 4. 写代码要考虑边界情况
例如属性未初始化 → 输出友好信息而不是 null。
七、总结与扩展建议
通过本次实验,我从以下方面提升了自己的 Java 能力:
- 清晰理解类、对象与构造方法
- 掌握封装与属性设计
- 学会多构造函数的重载
- 能将数学模型转化为代码逻辑
- 提升代码健壮性(null 处理、同步属性)
