Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类

该博客介绍了如何设计一个名为Person的类及其两个子类Student和Employee。Employee类进一步分为Faculty(教员)和Staff(职员)子类。每个类包含了特定属性如姓名、地址、电话等,并重写了toString方法。博主提到了UML图的绘制,同时指出题目描述不全,代码中包含了相关类的实现,并提供了测试程序。
摘要由CSDN通过智能技术生成

题目

11.2(Person、Student、Employee、Faculty和Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类。Employee类又有子类:教员类Faculty和职员类Staff。每个人都有姓名、地址、电话号码和电子邮件地址。学生有班级状态(大一、大二、大三或大四)。将这些状态定义为常量。一个雇员涉及办公室、工资和受聘日期。使用编程练习题10.14中定义的MyDate类为受聘日期创建一个对象。教员有办公时间和级别。职员有头衔。重写每个类中的toString方法,显示相应的类名和人名。
画出这些类的UML图并实现这些类。编写一个测试程序,创建Person、Studet、Employee、Faculty和Staff,并且调用他们的toString方法,显示响应的类名和人名
画出这些类的UML图并实现这些类。编写一个测试程序,创建Person Student Employee Faculty和Staff,并调用它们的toString方法

缺陷

题目很冗长,但介绍还不全
各个方法有getter and setter、构造器方法没有、输出语句格式是什么……这些都没说
全凭感觉

UML图

博主刚刚入门UML,还会有很多问题,欢迎大佬指正
在这里插入图片描述

代码

Test02_MyDate.java:用于参考的MyDate

点击这里浏览编程练习题10.14中定义的MyDate类

import java.util.GregorianCalendar;

public class Test02_MyDate {
   
    int year, month, day;   // 月从0开始

    public Test02_MyDate(){
   
        GregorianCalendar gc = new GregorianCalendar();
        year = gc.get(GregorianCalendar.YEAR);
        month = gc.get(GregorianCalendar.MONTH);
        day = gc.get(GregorianCalendar.DAY_OF_MONTH);
    }

    public Test02_MyDate(long l){
   
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(l);
        year = gc.get(GregorianCalendar.YEAR);
        month = gc.get(GregorianCalendar.MONTH);
        day = gc.get(GregorianCalendar.DAY_OF_MONTH);
    }

    
Java中,你可以通过创建一个名为`Person`的基,并让`Employee`作为其子类来实现这个结构。然后,为了进一步体现多态,我们可以创建两个`Employee`的子类,如`Faculty``Staff`。这里是一个简单的示例: ```java // Person作为基 public class Person { private String name; // 构造函数、gettersetter省略 public Person(String name) { this.name = name; } public void introduce() { System.out.println("这是一个Person对象,名字是:" + name); } } // Employee继承自Person public class Employee extends Person { private int id; // 省略构造函数getter/setter,可以添加部门信息或其他属性 @Override public void introduce() { super.introduce(); System.out.println("这是Employee,ID是:" + id); } } // FacultyStaff子类扩展Employee public class Faculty extends Employee { // 可能会添加教师资格、研究方向等属性 @Override public void introduce() { super.introduce(); System.out.println("这是Faculty,除了Employee的信息外还有学术背景..."); } } public class Staff extends Employee { // 可能包含职位、职责等相关属性 @Override public void introduce() { super.introduce(); System.out.println("这是Staff,除了Employee的信息外还有工作职责..."); } } ``` 在这个例子中,`Faculty``Staff`都可以看作是`Employee`的实例,它们分别有自己的特性,但在`introduce()`方法上实现了父`Employee`的行为。这展示了多态性,即同一种操作(`introduce()`)可以针对不同型的对象(`Faculty``Staff`)有不同的实现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值