当前位置: 首页 > news >正文

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 处理、同步属性)
http://www.dtcms.com/a/589430.html

相关文章:

  • 网站有哪些备案青海企业网站建设开发
  • 网站制作公司怎么找定制微信软件
  • autocad2025下载安装教程
  • 在页面上写C#(我的Blazor学习一)
  • 洛阳免费网站建设合肥建筑公司
  • 空间矢量PWM(SVPWM)实战:从原理到MATLAB仿真,优化逆变器输出谐波
  • 基于MATLAB的图像融合拼接GUI系统设计
  • 【Nginx优化】性能调优与安全配置
  • 海淘网站入口又拍 wordpress
  • 抖音审核机制、降权、养号、橱窗要求
  • 网站的页脚近期新闻消息
  • 1.python基础:基本概述
  • 常德百竞seo洛阳seo
  • configureFlutterEngine引擎配置详解
  • 兰州拼团网站建设wordpress 外贸
  • 【MySQL笔记】索引 (非常重要)
  • 霍夫变换和基于时频脊线的汽车FMCW雷达干扰抑制——论文阅读
  • Arbess CICD实践(4) - 使用Arbess+GitPuk+sourcefare+PostIn搭建Java自动化部署+代码扫描+自动化测试
  • 商品数据包网站开发郑州交易网站建设
  • n8n Docker Compose 部署官方+中文版本插件
  • 深圳建网站兴田德润团队创办一个网站能挣钱吗
  • C语言复习三(2025.11.9)
  • python综合大题(包的练习)
  • 重庆建设局网站从零学php网站开发
  • 【把Linux“聊”明白】自动化构建-make/Makefile详解
  • 软考 系统架构设计师之考试感悟4
  • 广州天河 网站建设乌市网站建设为
  • 52_AI智能体运维部署之使用Flask蓝图模块化系统监控服务
  • 【2025-11-07】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
  • Linux系统笔记--Base