9、Tom(Person)是一名大學(xué)生運(yùn)動(dòng)員,擁有兩個(gè)身份(Role),都能做(do)些事情,但
9、Tom(Person)是一名大學(xué)生運(yùn)動(dòng)員,擁有兩個(gè)身份(Role),都能做(do)些事情,但做的事情各有不同。他不僅需要作為一名學(xué)生(Student)在學(xué)校讀書(shū)(learn),還需要作為一名運(yùn)動(dòng)員(Athlete)參加長(zhǎng)跑訓(xùn)練(train)。請(qǐng)用類圖表示Tom的這種雙重身份,請(qǐng)寫(xiě)出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()方法,無(wú)需再次定義。
}
```