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

简介: 运动员和教练案例图解 文字分析和示例代码如下: 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 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
相关文章
|
存储 安全 Cloud Native
揭秘Quarkus安全秘籍:守护云原生应用,抵御未知威胁,助力企业稳健前行
随着云原生技术的发展,企业愈发倾向于在容器化环境中部署应用。作为一款专为云原优化的Java框架,Quarkus的安全性备受关注。本文介绍了Quarkus中的安全最佳实践,包括使用OpenID Connect进行身份认证、使用JWT进行权限控制以及保护敏感端点。通过这些实践,可有效提升应用安全性。同时,还需定期更新依赖库、使用HTTPS协议、加密存储敏感数据及定期进行安全审计,以确保应用的安全性和可靠性。
277 4
|
NoSQL 数据处理 MongoDB
MongoDB与阿里云携手驱动WeLab汇立集团引领超千万用户迈向智能金融未来
阿里云数据库MongoDB版无论从数据特点还是技术要求方面,都完美地匹配了WeLab的需求
1132 0
MongoDB与阿里云携手驱动WeLab汇立集团引领超千万用户迈向智能金融未来
妈妈们的接种本有用了,输入生产批号就能查到问题疫苗
阿里健康“码上放心”追溯平台,让药品和疫苗各个环节更加透明。
3392 0
|
监控 网络协议 Linux
如何解决linux SSH log 中不带年份的问题
打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.
1604 0
|
2天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
13天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1284 5
|
12天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1318 87