Java面向对象综合实践:从Person到Company的继承体系设计与对象管理 1. 从Person到Company的继承体系设计在Java面向对象编程中继承体系的设计往往从最基础的类开始。我们先来看Person类的设计这个类将作为整个继承体系的基类。Person类包含三个基本属性name姓名、age年龄和gender性别。这些属性被声明为private以保证封装性同时提供对应的getter和setter方法。public abstract class Person { private String name; private int age; private boolean gender; public Person(String name, int age, boolean gender) { this.name name; this.age age; this.gender gender; } Override public String toString() { return name - age - gender; } Override public boolean equals(Object obj) { if (this obj) return true; if (obj null || getClass() ! obj.getClass()) return false; Person other (Person) obj; return age other.age gender other.gender Objects.equals(name, other.name); } }从Person类派生出Student类和Employee类体现了面向对象中is-a的关系。Student类增加了stuNo学号和clazz班级属性Employee类则增加了salary薪资和company公司属性。这种设计遵循了里氏替换原则子类可以完全替代父类。2. 方法覆盖与多态的实现在继承体系中方法覆盖是实现多态的关键。我们来看Student类如何覆盖toString()和equals()方法public class Student extends Person { private String stuNo; private String clazz; public Student(String name, int age, boolean gender, String stuNo, String clazz) { super(name, age, gender); this.stuNo stuNo; this.clazz clazz; } Override public String toString() { return Student: super.toString() - stuNo - clazz; } Override public boolean equals(Object obj) { if (!super.equals(obj)) return false; Student other (Student) obj; return Objects.equals(stuNo, other.stuNo) Objects.equals(clazz, other.clazz); } }Employee类的equals()方法实现需要特别注意company属性可能为null的情况以及salary属性的比较精度问题public class Employee extends Person { private Company company; private double salary; public Employee(String name, int age, boolean gender, double salary, Company company) { super(name, age, gender); this.company company; this.salary salary; } Override public boolean equals(Object obj) { if (!super.equals(obj)) return false; Employee other (Employee) obj; if (company null) { if (other.company ! null) return false; } else if (!company.equals(other.company)) return false; DecimalFormat df new DecimalFormat(#.#); return df.format(salary).equals(df.format(other.salary)); } }3. 对象管理与集合操作在实际应用中我们需要管理多个Person对象并进行排序、去重等操作。首先创建一个List 来存储所有人员ListPerson personList new ArrayList(); // 添加Student和Employee对象 personList.add(new Student(zhang, 23, false, 001, net15)); personList.add(new Employee(wang, 18, true, 3000.51, new Company(IBM)));对personList进行排序可以使用Comparator接口实现自定义排序规则。这里我们实现按姓名升序、姓名相同按年龄升序的排序Collections.sort(personList, new ComparatorPerson() { Override public int compare(Person p1, Person p2) { int nameCompare p1.getName().compareTo(p2.getName()); if (nameCompare ! 0) return nameCompare; return Integer.compare(p1.getAge(), p2.getAge()); } });4. 对象分类与去重处理将personList中的对象按照类型分类到stuList和empList中并确保不添加重复对象ListPerson stuList new ArrayList(); ListPerson empList new ArrayList(); for (Person person : personList) { if (person instanceof Student) { if (!containsPerson(stuList, person)) { stuList.add(person); } } else if (person instanceof Employee) { if (!containsPerson(empList, person)) { empList.add(person); } } } private boolean containsPerson(ListPerson list, Person person) { for (Person p : list) { if (p.equals(person)) { return true; } } return false; }这种分类处理在实际业务中很常见比如在学校管理系统中分离学生和教职工在企业HR系统中区分不同部门的员工等。通过合理的继承体系设计和对象管理可以大大简化这类业务逻辑的实现。

相关新闻

最新新闻

ARM Cortex-M开发板入门:M-K1HSE环境搭建与Hello World实现

ARM Cortex-M开发板入门:M-K1HSE环境搭建与Hello World实现

1. M-K1HSE开发板开箱与环境准备M-K1HSE是一款面向嵌入式开发者的高性能开发板,搭载了基于ARM Cortex-M系列的处理核心,板载丰富的外设接口和调试工具。作为嵌入式开发的"Hello World"入门项目,我们需要先完成开发环境的搭建。1.1 …

2026/7/16 11:36:22
Windows控制台I/O机制与API实战解析

Windows控制台I/O机制与API实战解析

1. Windows控制台I/O机制基础解析控制台输入输出是Windows系统中最基础的交互方式之一,其底层实现涉及多个关键API和模式设置。理解这些机制对于开发命令行工具、系统监控程序等场景至关重要。Windows控制台子系统通过一组精确定义的API函数提供I/O能力,…

2026/7/16 11:36:22
教培机构考公刷题小程序系统开发,降本增效稳续费

教培机构考公刷题小程序系统开发,降本增效稳续费

如今考公、学历提升、各类资格证培训赛道竞争日趋白热化,行业内卷程度持续加剧。学员刷题需求暴涨、考试题型繁杂多变,让众多培训机构陷入两大运营困境:一是老师备课任务繁重,人力成本居高不下;二是学员学习效果无法直…

2026/7/16 11:36:22
C4D进阶实战:巧用布尔运算打造精密电子元件

C4D进阶实战:巧用布尔运算打造精密电子元件

1. 布尔运算在C4D精密建模中的核心价值 我第一次接触C4D布尔运算是在做一个智能手表模型时,当时需要在外壳上挖出精确的传感器开口。传统的手动布线方法花了整整一下午还出现破面,而布尔运算只用五分钟就完成了这个看似复杂的结构。这种"减法思维&q…

2026/7/16 11:36:22
如何通过AlienFX Control打造终极硬件控制引擎:深度解析开源Alienware工具

如何通过AlienFX Control打造终极硬件控制引擎:深度解析开源Alienware工具

如何通过AlienFX Control打造终极硬件控制引擎:深度解析开源Alienware工具 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 你是否厌倦了臃肿…

2026/7/16 11:36:22
前端工程师的转型之路:从焦虑到AI工程师的实战分享(收藏版)

前端工程师的转型之路:从焦虑到AI工程师的实战分享(收藏版)

文章指出,随着AI的发展,前端工程师面临被替代的风险,建议前端工程师不要把全栈当作终点,而应将AI工程师作为职业发展方向。作者分享了从前端工程师转型为AI工程师的经验,强调“AI First”的学习方法,即遇到…

2026/7/16 11:31:22

月新闻