9、Tom(Person)是一名大学生运动员,拥有两个身份(Role),都能做(do)些事情,但
9、Tom(Person)是一名大学生运动员,拥有两个身份(Role),都能做(do)些事情,但做的事情各有不同。他不仅需要作为一名学生(Student)在学校读书(learn),还需要作为一名运动员(Athlete)参加长跑训练(train)。请用类图表示Tom的这种双重身份,请写出student类和athlete类的代码。
+------------------+
| Tom |
+------------------+
| -name : String |
+------------------+
| +learn() |
| +train() |
+------------------+
|
|
V
+------------------+ +------------------+
| Student | | Athlete |
+------------------+ +------------------+
| -studentNumber | | -coachName : String|
+------------------+ +------------------+
| +learn() | | +train() |
+------------------+ +------------------+
```
Student类的代码:
```
public class Student {
private String name;
private int studentNumber;
public Student(String name, int studentNumber) {
this.name = name;
this.studentNumber = studentNumber;
}
public void learn() {
System.out.println("I am a student and I am learning.");
}
}
```
Athlete类的代码:
```
public class Athlete {
private String name;
private String coachName;
public Athlete(String name, String coachName) {
this.name = name;
this.coachName = coachName;
}
public void train() {
System.out.println("I am an athlete and I am training.");
}
}
```
Tom类的代码:
```
public class Tom extends Student, Athlete {
public Tom(String name, int studentNumber, String coachName) {
super(name, studentNumber);
Athlete(name, coachName);
}
// Tom类继承了Student类和Athlete类的learn()和train()方法,无需再次定义。
}
```