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

简介: 运动员和教练案例图解 文字分析和示例代码如下: 1 /* 2 运动员和教练案例: 3 乒乓球运动员和篮球运动员。 4 乒乓球教练和篮球教练。

运动员和教练案例图解

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

  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 }

 

我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
1月前
|
存储 编译器 C语言
C++的面向诗篇:类的叙事与对象的旋律
C++的面向诗篇:类的叙事与对象的旋律
25 0
|
9月前
2022年 一月19号复盘内容二。(继承 多态 接口 抽象(二)
2022年 一月19号复盘内容二。(继承 多态 接口 抽象(二)
20 0
|
5月前
|
存储 NoSQL MongoDB
变形记---抽象接口,屎山烂代码如何改造成优质漂亮的代码
在游戏服务器开发过程中,我们经常会在动手码代码之前好好的设计一番,如何设计类,如何设计接口,如何调用,有没有什么隐患,在这些问题考虑评审可以Cover现阶段的需求的情况下再动手。不过,对于一些初级,甚至中高级开发者,仍然不可避免的进入了一个死胡同,缺少设计,屎山代码堆积,越堆越臭,越写越烂,直到很难维护必须要重新改造。最近我给M部门面试服务器主程序开发的职位,我不问开发语言的语法,我只问他们的架构设计经验,我发现相当一部分5-12年“本应该有足够开发经验。
|
9月前
|
C++
自考学习C++ 继承与派生
自考学习C++ 继承与派生
|
Java
Java实验报告四,研究生薪资管理,创建一个抽象交通工具Vehicle类,经理与员工工资等实验
1、实验题目:类的继承和方法重写 定义一个基类作为父类,再定义一个继承父类的子类,在子类中重写父类的方法,使用super关键字调用父类的方法,测试其功能。
202 0
|
编译器 C++
爱上c++的第六天(核心课程):继承和多态
学习c++的人一定知道的就是c++是面向对象设计的,而面对对象的三大特性就是封装,继承和多态,我们在刚开始学习的时候就已经学过封装了,今天我们主要来学习一下多态和继承。
42 0
|
存储 编译器 C++
C++继承和多态核心重点知识刨析,一文必拿下
C++继承和多态核心重点知识刨析,一文必拿下
C++继承和多态核心重点知识刨析,一文必拿下
Java继承的综合案例
Java继承的综合案例
177 0
Java继承的综合案例