类、抽象类、接口的综合小练习---运动员和教练案例

运动员和教练案例图解

文字分析和示例代码如下:

  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 }

 

posted @ 2018-02-18 20:33  黑泽君  阅读(503)  评论(0编辑  收藏  举报