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

运动员和教练案例图解

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

  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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JetpropelledSnake

Python学习笔记之Python的Super方法

1405
来自专栏我是业余自学C/C++的

栈(stack)是一种特殊的线性表,其插入(也称入栈或压栈)和删除(也称出栈或弹栈)操作都在表的同一端进行。这一端被称为栈顶(top)另一端称为栈底端(bott...

811
来自专栏HansBug's Lab

Codevs3278[NOIP2013]货车运输

3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述...

3566
来自专栏算法修养

LightOj 1422 Halloween Costumes(区间DP)

B - Halloween Costumes Time Limit:2000MS Memory Limit:32768KB 64bit IO...

3546
来自专栏微信公众号:Java团长

Java回调机制(CallBack)详解

Java回调机制(CallBack),初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然...

1252
来自专栏写代码的海盗

撸起袖子加油干 golang入坑系列

还是提醒一下,里面有段子,不都是技术。 冲着技术来的,慢走不送。没有版权,但可以给我发邮件(ztao8607@gmail.com) 在我的发小朋友中,终于最后一...

2745
来自专栏前端笔记

【 测试文章 第一篇章 】Hello World 初始程序

Hello World ,中文意思:你好,世界。世界上的第一个程序就是Hello World,由Brian Kernighan创作。 中文名:你好,世界。 ...

32210
来自专栏web前端教室

震惊了!这样的js面试题让所有人-男默女泪

Sorry,大周末的搞一下标题党玩玩,但这个面试题倒是真的有坑,很sorry,这一次我掉进了第一个坑。 看问题一, (function(xxx){ delet...

21310
来自专栏HansBug's Lab

Codevs2822 爱在心中

2822 爱在心中  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description “每个人...

3334
来自专栏海天一树

NOIP 2018普及组初赛C/C++答案详解

1 D 打印机是把电脑里的资料打印到纸上,所以是输出设备。 扫描仪、键盘和鼠标都是往电脑里输入东西,是输入设备。

2163

扫码关注云+社区

领取腾讯云代金券