问题描述
在一个大学里,有若干教师和学生。根据这个信息设计三个类University、Teacher、Person和Student,一个接口Learnable。要求:
(1) 设计University类,里面使用常量属性:NAME,其值为NUIST,该类使用单例模式设计。
(2) 设计Person类,属性包括姓名name和年龄age,添加无参和全参构造方法,并封装。
(3) 写出Learnable接口,里面包含study()和exercise()两个方法。
(4) 设计Teacher类(增加工号teacherID属性和工资salary属性)和Student类(增加学号studentID属性和专业major属性),它们继承Person类。
(4) 学生实现Learnable接口,内容自定。
(5) University添加类集,包含一个数组,里面存有所有教师和学生对象。
该类中有如下方法:
1)void register(Person person) 注册某人
2)void fire(Person person) 开除一个人
3)List<Person> searchPerson(String name)根据名字查出所有与此名相同的Person,得到一个数组。
4)double getTotalSalary() 计算大学里面所有教师的工资总和。
代码实现
(1)University类
package ThreeWork;
import java.util.LinkedList;
import java.util.List;
public class University {
public static final String NAME = "NUIST";
private static University university = new University(); //University实例化
private static Person person = new Person(); //Person实例化
static List<Person> list = new LinkedList<>(); //List
//无参构造方法
public University(){
}
//注册某人
public static void register(Person person){
list.add(person); //注册一个人
}
//开除一个人
public static void fire(Person person) {
list.remove(person); //开除一个人
}
//根据名字查出所有与此名相同的Person,得到一个数组
public static Person searchPerson(String name) {
for (Person person: list) {
if (person.getName().equals(name)) {
return person;
}
}
return null;
}
//计算大学里面所有教师的工资总和
public static double getTotalSalary() {
double totalSalary = 0;
for (Person person: list) {
if (person instanceof Teacher) {
totalSalary = totalSalary + ((Teacher)person).getSalary();
}
}
return totalSalary;
}
}
(2)设计Person类
package ThreeWork;
public class Person {
private String name; //名字
private int age; //年龄
//Setter
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
//Getter
public String getName() {
return name;
}
public int getAge() {
return age;
}
//无参构造方法
public Person(){
}
//有参构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
(3)写出Learnable接口
package ThreeWork;
public interface Learnable {
public void study(); //方法1
public void exercise(); //方法2
}
(4)设计Teacher类
package ThreeWork;
public class Teacher extends Person{
public String teacherID; //工号
public double salary; //工资
//Setter
public void setTeacherID(String teacherID) {
this.teacherID = teacherID;
}
public void setSalary(double salary) {
this.salary = salary;
}
//Getter
public String getTeacherID() {
return teacherID;
}
public double getSalary() {
return salary;
}
//无参构造方法
public Teacher(){
}
//有参构造方法
public Teacher(String name, int age, String teacherID, double salary) {
super(name, age);
this.teacherID = teacherID;
this.salary = salary;
}
}
(5)设计Student类
package ThreeWork;
public class Student extends Person implements Learnable{
public String studentID; //学号
public String major; //专业
@Override
public void study() {
System.out.println("学习中.............");
}
@Override
public void exercise() {
System.out.println("锻炼中...........");
}
//无参构造方法
public Student(){
}
//有参构造方法
public Student(String name, int age, String studentID, String major) {
super(name, age);
this.studentID = studentID;
this.major = major;
}
}