运动员和教练案例图解
文字分析和示例代码如下:
1 /*
2 运动员和教练案例:
3 乒乓球运动员和篮球运动员。
4 乒乓球教练和篮球教练。
5 为了出国交流,跟乒乓球相关的人员都需要学习英语。
6 请用所学知识:
7 分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。
8
9 整个分析过程,通过画图的讲解,如图所示:
10 -----------------------------------------------------------------------------
11 文字的讲解如下:
12 分析:从具体到抽象
13 ---------------------------------------
14 乒乓球运动员
15 姓名,年龄
16 吃饭,学习,睡觉
17 篮球运动员
18 姓名,年龄
19 吃饭,学习,睡觉
20 由于有共性功能,所以提取一个抽象运动员类:
21 抽象运动员类
22 姓名,年龄
23 吃饭();
24 学习();
25 睡觉() {}
26 ---------------------------------------
27 乒乓球教练
28 姓名,年龄
29 吃饭,教学,睡觉
30 篮球教练
31 姓名,年龄
32 吃饭,教学,睡觉
33 由于有共性功能,所以提取一个抽象教练类:
34 抽象教练类
35 姓名,年龄
36 吃饭();
37 教学();
38 睡觉() {}
39 ---------------------------------------
40 由于抽取后的抽象运动员类和抽象教练类还有共性功能,所以提取一个更抽象的人类:
41 抽象人类:
42 姓名,年龄
43 吃饭();
44 睡觉() {}
45 ---------------------------------------
46 抽象运动员类:继承自抽象人类,但又有自己的抽象方法 学习();
47 抽象教练类:继承自抽象人类,但又有自己的抽象方法 教学();
48
49 学英语是一个扩展的功能,所以要定义一个接口。
50 接口:
51 说英语();
52
53 乒乓球运动员:实现说英语
54 乒乓球教练:实现说英语
55 -----------------------------------------------------------------------------
56 实现:从抽象到具体
57 说英语接口
58
59 抽象人类
60 抽象运动员类
61 抽象教练类
62
63 具体的说英语的乒乓球运动员类
64 具体的篮球运动员类
65
66 具体的说英语的乒乓球教练类
67 具体的篮球教练类
68
69 测试类
70 -----------------------------------------------------------------------------
71 使用:
72 使用具体的说英语的乒乓球运动员类和说英语的乒乓球教练类
73 以及具体的篮球运动员类和具体的篮球教练类进行测试。
74 -----------------------------------------------------------------------------
75 */
76 //定义一个说英语的接口
77 interface SpeakEnglish {
78 //说英语
79 public abstract void speak();
80 }
81
82 //定义抽象人类
83 abstract class Person {
84 private String name;
85 private int age;
86
87 public Person() {}
88
89 public Person(String name, int age) {
90 this.name = name;
91 this.age = age;
92 }
93
94 public String getName() {
95 return name;
96 }
97
98 public void setName(String name) {
99 this.name = name;
100 }
101
102 public int getAge() {
103 return age;
104 }
105
106 public void setAge(int age) {
107 this.age = age;
108 }
109
110 //睡觉都是一样的,所以为成员方法。
111 public void sleep() {
112 System.out.println("人都是要睡觉的");
113 }
114
115 //吃饭是不一样的,所以为抽象方法。
116 public abstract void eat();
117 }
118
119 //定义抽象运动员类,继承抽象人类
120 abstract class Player extends Person {
121 public Player() {}
122
123 public Player(String name, int age) {
124 super(name, age);
125 }
126
127 //学习的东西不一样,所以为抽象方法。
128 public abstract void study();
129 }
130
131 //定义抽象教练类,继承抽象人类
132 abstract class Coach extends Person {
133 public Coach() {}
134
135 public Coach(String name, int age) {
136 super(name, age);
137 }
138
139 //教学的东西不一样,所以为抽象方法。
140 public abstract void teach();
141 }
142
143 //定义具体的说英语的乒乓球运动员类
144 class PingPangPlayer extends Player implements SpeakEnglish {
145 public PingPangPlayer() {}
146
147 public PingPangPlayer(String name, int age) {
148 super(name, age);
149 }
150
151 //吃
152 public void eat() {
153 System.out.println("乒乓球运动员吃大白菜,喝小米粥");
154 }
155
156 //学习
157 public void study() {
158 System.out.println("乒乓球运动员学习如何发球和接球");
159 }
160
161 //说英语
162 public void speak() {
163 System.out.println("乒乓球运动员说英语");
164 }
165 }
166
167 //定义具体的篮球运动员类
168 class BasketballPlayer extends Player {
169 public BasketballPlayer() {}
170
171 public BasketballPlayer(String name, int age) {
172 super(name, age);
173 }
174
175 //吃
176 public void eat() {
177 System.out.println("篮球运动员吃牛肉,喝牛奶");
178 }
179
180 //学习
181 public void study() {
182 System.out.println("篮球运动员学习如何运球和投篮");
183 }
184 }
185
186 //定义具体的说英语的乒乓球教练类
187 class PingPangCoach extends Coach implements SpeakEnglish {
188 public PingPangCoach() {}
189
190 public PingPangCoach(String name, int age) {
191 super(name, age);
192 }
193
194 //吃
195 public void eat() {
196 System.out.println("乒乓球教练吃小白菜,喝大米粥");
197 }
198
199 //教
200 public void teach() {
201 System.out.println("乒乓球教练教如何发球和接球");
202 }
203
204 //说英语
205 public void speak() {
206 System.out.println("乒乓球教练说英语");
207 }
208 }
209
210 //定义具体的篮球教练类
211 class BasketballCoach extends Coach {
212 public BasketballCoach() {}
213
214 public BasketballCoach(String name, int age) {
215 super(name, age);
216 }
217
218 //吃
219 public void eat() {
220 System.out.println("篮球教练吃羊肉,喝羊奶");
221 }
222
223 //教
224 public void teach() {
225 System.out.println("篮球教练教如何运球和投篮");
226 }
227 }
228
229 //测试类
230 class InterfaceDemo {
231 public static void main(String[] args) {
232 //测试运动员(乒乓球运动员和篮球运动员)
233 //具体的说英语的乒乓球运动员类
234 PingPangPlayer ppp = new PingPangPlayer();
235 ppp.setName("王浩");
236 ppp.setAge(33);
237 System.out.println(ppp.getName()+"---"+ppp.getAge());
238 ppp.eat();
239 ppp.sleep();
240 ppp.study();
241 ppp.speak();
242 System.out.println("----------------");
243 //通过带参构造给数据
244 ppp = new PingPangPlayer("张继科", 35);
245 System.out.println(ppp.getName()+"---"+ppp.getAge());
246 ppp.eat();
247 ppp.sleep();
248 ppp.study();
249 ppp.speak();
250 System.out.println("----------------");
251
252 //具体的篮球运动员类
253 BasketballPlayer bp = new BasketballPlayer();
254 bp.setName("姚明");
255 bp.setAge(34);
256 System.out.println(bp.getName()+"---"+bp.getAge());
257 bp.eat();
258 bp.sleep();
259 bp.study();
260 //bp.speak(); //报错,因为具体的篮球运动员类没有该方法。
261 System.out.println("----------------");
262 //通过带参构造给数据
263 bp = new BasketballPlayer("林书豪", 28);
264 System.out.println(bp.getName()+"---"+bp.getAge());
265 bp.eat();
266 bp.sleep();
267 bp.study();
268 System.out.println("----------------");
269
270 //测试教练(乒乓球教练和篮球教练)
271 //具体的说英语的乒乓球教练类
272 PingPangCoach ppc = new PingPangCoach();
273 ppc.setName("刘国梁");
274 ppc.setAge(45);
275 System.out.println(ppc.getName()+"---"+ppc.getAge());
276 ppc.eat();
277 ppc.sleep();
278 ppc.teach();
279 ppc.speak();
280 System.out.println("----------------");
281 //通过带参构造给数据
282 ppc = new PingPangCoach("邓亚萍", 50);
283 System.out.println(ppc.getName()+"---"+ppc.getAge());
284 ppc.eat();
285 ppc.sleep();
286 ppc.teach();
287 ppc.speak();
288 System.out.println("----------------");
289
290 //具体的篮球教练类
291 BasketballCoach bc = new BasketballCoach();
292 bc.setName("易建联");
293 bc.setAge(35);
294 System.out.println(bc.getName()+"---"+bc.getAge());
295 bc.eat();
296 bc.sleep();
297 bc.teach();
298 System.out.println("----------------");
299 //通过带参构造给数据
300 bc = new BasketballCoach("易建联", 35);
301 System.out.println(bc.getName()+"---"+bc.getAge());
302 bc.eat();
303 bc.sleep();
304 bc.teach();
305 }
306 }