From 6c68b696fcb0988806e09944761ae8281c992667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=95=85=E6=98=A5?= <3481369387@qq.com> Date: Fri, 3 Apr 2026 14:27:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0W5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- W5/Person.java | 102 +++++++++++++++++++++++++++++++++++++++ W5/PersonSystemTest.java | 17 +++++++ W5/W5.txt | 0 3 files changed, 119 insertions(+) create mode 100644 W5/Person.java create mode 100644 W5/PersonSystemTest.java create mode 100644 W5/W5.txt diff --git a/W5/Person.java b/W5/Person.java new file mode 100644 index 0000000..00bc1ea --- /dev/null +++ b/W5/Person.java @@ -0,0 +1,102 @@ +import java.util.ArrayList; +import java.util.List; + +// 公共父类 Person +class Person { + protected String id; + protected String name; + protected int age; + + public Person(String id, String name, int age) { + this.id = id; + this.name = name; + this.age = age; + } + + // 公共方法:展示基本信息 + public void showInfo() { + System.out.println("ID: " + id + ", 姓名: " + name + ", 年龄: " + age); + } +} + +// 子类 Student(学生) +class Student extends Person { + private String studentNo; // 学号(特有属性) + private String major; // 专业(特有属性) + + public Student(String id, String name, int age, String studentNo, String major) { + super(id, name, age); + this.studentNo = studentNo; + this.major = major; + } + + // 重写 showInfo,展示学生特有信息 + @Override + public void showInfo() { + super.showInfo(); + System.out.println("学号: " + studentNo + ", 专业: " + major); + System.out.println("------------------------"); + } + + // 学生特有方法 + public String getStudentNo() { + return studentNo; + } +} + +// 子类 Teacher(老师) +class Teacher extends Person { + private String teacherNo; // 工号(特有属性) + private String department;// 院系(特有属性) + + public Teacher(String id, String name, int age, String teacherNo, String department) { + super(id, name, age); + this.teacherNo = teacherNo; + this.department = department; + } + + // 重写 showInfo,展示老师特有信息 + @Override + public void showInfo() { + super.showInfo(); + System.out.println("工号: " + teacherNo + ", 院系: " + department); + System.out.println("------------------------"); + } + + // 老师特有方法 + public String getTeacherNo() { + return teacherNo; + } +} + +// 管理类:用多态统一管理 +class PersonManager { + private List personList = new ArrayList<>(); + + // 统一添加方法:替代 addStudent 和 addTeacher + public void addPerson(Person p) { + // 1. 处理公共属性:直接通过父类引用操作 + System.out.println("正在添加人员: " + p.name); + + // 2. 处理子类特有属性:通过类型判断 + 向下转型 + if (p instanceof Student) { + Student student = (Student) p; + System.out.println("学生学号: " + student.getStudentNo() + ",已录入学生信息"); + } else if (p instanceof Teacher) { + Teacher teacher = (Teacher) p; + System.out.println("老师工号: " + teacher.getTeacherNo() + ",已录入老师信息"); + } + + // 3. 统一存入集合 + personList.add(p); + System.out.println("添加成功!\n"); + } + + // 统一展示所有人员信息 + public void showAllPersons() { + System.out.println("=== 所有人员信息 ==="); + for (Person p : personList) { + p.showInfo(); // 多态调用:自动匹配子类的 showInfo + } + } +} diff --git a/W5/PersonSystemTest.java b/W5/PersonSystemTest.java new file mode 100644 index 0000000..45f871a --- /dev/null +++ b/W5/PersonSystemTest.java @@ -0,0 +1,17 @@ +// 主类测试 +public class PersonSystemTest { + public static void main(String[] args) { + PersonManager manager = new PersonManager(); + + // 测试添加学生 + Student student = new Student("P001", "张三", 20, "S2023001", "计算机科学与技术"); + manager.addPerson(student); + + // 测试添加老师 + Teacher teacher = new Teacher("P002", "李四", 35, "T2020001", "计算机学院"); + manager.addPerson(teacher); + + // 展示所有信息 + manager.showAllPersons(); + } +} \ No newline at end of file diff --git a/W5/W5.txt b/W5/W5.txt new file mode 100644 index 0000000..e69de29