需求:

/*

    教练和运动员案例

        乒乓球运动员和篮球运动员。

        乒乓球教练和篮球教练。

        跟乒乓球相关的人员都需要学习英语。

        分析,这个案例中有哪些抽象类,哪些接口,哪些具体类。

    

    整个分析过程,由图片展示。    

*/

代码如下:

interface SpeakEnglish {
//说英语
public abstract void speak();
} //定义人的抽象类
abstract class Person {
private String name;
private int age; public Person() {} public Person(String name,int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} //睡觉
public void sleep() {
System.out.println("人都是要睡觉的");
} //吃饭
public abstract void eat();//吃的不一样,抽象方法
} //定义运动员(抽象类)
abstract class Player extends Person {
public Player() {} public Player(String name,int age) {
super(name,age);
}
//这里会继承父类吃饭功能
//学习
public abstract void study();//运动员学习内容不一样,抽取为抽象
} //定义教练(抽象类)
abstract class Coach extends Person {
public Coach() {} public Coach(String name,int age) {
super(name,age);
}
//教
public abstract void teach();//教练教的不一样,抽象方法
} //乒乓球运动员
class PingPangPlayer extends Player implements SpeakEnglish {
public PingPangPlayer(){} public PingPangPlayer(String name,int age) {
super(name,age);
} //吃
public void eat() {
System.out.println("乒乓球运动员吃大白菜,喝小米粥");
} //学习
public void study() {
System.out.println("乒乓球运动员学习如何发球和接球");
} //说英语,对于接口抽象方法的具体重写
public void speak() {
System.out.println("乒乓球运动员说英语");
}
} //定义篮球运动员具体类
class BasketballPlayer extends Player {//不需要继承接口,因为他不需要说英语
public BasketballPlayer(){} public BasketballPlayer(String name,int age) {
super(name,age);
} //吃
public void eat() {
System.out.println("篮球运动员吃牛肉,喝牛奶");
} //学习
public void study() {
System.out.println("篮球运动员学习如何运球和投篮");
}
} //定义乒乓球教练具体类
class PingPangCoach extends Coach implements SpeakEnglish {
public PingPangCoach(){} public PingPangCoach(String name,int age) {
super(name,age);
} //吃
public void eat() {
System.out.println("乒乓球教练吃小白菜,喝大米粥");
} //教
public void teach() {
System.out.println("乒乓球教练教如何发球和接球");
} //说英语 对于接口抽象方法的具体重写
public void speak() {
System.out.println("乒乓球教练说英语");
}
} //定义篮球教练具体类
class BasketballCoach extends Coach {
public BasketballCoach(){} public BasketballCoach(String name,int age) {
super(name,age);
} //吃
public void eat() {
System.out.println("篮球教练吃羊肉,喝羊奶");
} //教
public void teach() {
System.out.println("篮球教练教如何运球和投篮");
}
} class InterfaceDemo {
public static void main(String[] args) {
//测试运动员(乒乓球运动员和篮球运动员)
//乒乓球运动员
PingPangPlayer ppp = new PingPangPlayer();//自己类实现
ppp.setName("王浩");
ppp.setAge(33);
System.out.println(ppp.getName()+"---"+ppp.getAge());
ppp.eat();
ppp.sleep();
ppp.study();
ppp.speak();
System.out.println("----------------");
//通过带参构造给数据
ppp = new PingPangPlayer("张继科",27);
System.out.println(ppp.getName()+"---"+ppp.getAge());
ppp.eat();
ppp.sleep();
ppp.study();
ppp.speak();
System.out.println("----------------"); //篮球运动员
BasketballPlayer bp = new BasketballPlayer();
bp.setName("姚明");
bp.setAge(34);
System.out.println(bp.getName()+"---"+bp.getAge());
bp.eat();
bp.sleep();
bp.study();
//bp.speak(); //没有该方法,所以会报错
System.out.println("----------------");
//通过带参构造给数据
bp = new BasketballPlayer("易建联",31);
System.out.println(bp.getName()+"----"+bp.getAge());
bp.eat();
bp.sleep();
bp.study();
System.out.println("----------------"); //乒乓球教练
PingPangCoach ppc = new PingPangCoach();
ppc.setName("杨道龙");
ppc.setAge(24);
System.out.println(ppc.getName()+"---"+ppc.getAge());
ppc.eat();
ppc.sleep();
ppc.teach();
ppc.speak();
System.out.println("----------------");
//通过带参构造给数据
ppc = new PingPangCoach("老K教练",56);
System.out.println(ppc.getName()+"---"+ppc.getAge());
ppc.eat();
ppc.teach();
ppc.sleep();
ppc.speak();
//篮球教练
BasketballCoach bc = new BasketballCoach();
bc.setName("杨道龙");
bc.setAge(24);
System.out.println(bc.getName()+"---"+bc.getAge());
bc.eat();
bc.sleep();
bc.teach();
//bc.speak();
bc = new BasketballCoach("李继超",34);
System.out.println(bc.getName()+"---"+bc.getAge());
bc.eat();
bc.sleep();
bc.teach();
System.out.println("----------------");
}
}

《java入门第一季》之面向对象综合小案例的更多相关文章

  1. 《java入门第一季》之正则表达式小案例

    案例一: 判断手机号码是否满足要求 import java.util.Scanner; /* * * 需求: * 判断手机号码是否满足要求? * * 分析: * 13436975980 * 13688 ...

  2. 《java入门第一季》之HashSet小案例:获取10个1至20的随机数,要求随机数不能重复

    这是基于HashSet集合的唯一性. /*  * 编写一个程序,获取10个1至20的随机数,要求随机数不能重复.  *   * 分析:  * A:创建随机数对象  * B:创建一个HashSet集合 ...

  3. 《java入门第一季》之根据小案例体会泛型

    泛型在哪些地方使用呢? * 看API,如果类,接口,抽象类后面跟的有<E>就说要使用泛型.一般来说就是在集合中使用. 下面根据案例,加深体会泛型的作用. 案例一: import java. ...

  4. 《java入门第一季》之StringBuffer小案例

    这里是针对其反转功能来举的例子,再对比之前写的一篇String类的反转功能,StringBuffer明显提高了代码量,提高了效率. import java.util.Scanner; /* * 把字符 ...

  5. 《java入门第一季》StringBuffer类小案例

    /* * 把数组拼接成一个字符串 */ public class StringBufferTest2 { public static void main(String[] args) { // 定义一 ...

  6. 《java入门第一季》之Date类案例,算一算你的恋爱纪念日

    想算你和你对象谈了多久了,还在用笔算吗,是不是很头疼?写个程序算一算吧!会变得如此简单. import java.text.ParseException; import java.text.Simpl ...

  7. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  8. Java入门第一季——从此投身Java??

    找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季  一.简 ...

  9. 《java入门第一季》之面向对象(this和super详细分析)

    此文章来自于书籍,里面介绍了this和super详细的区别.当然在后边的文章中还有涉及super的时候还会分析. Java关键字this.super使用总结 一.this Java关键字this只能用 ...

  10. 《java入门第一季》之面向对象(面向对象案例详解)

    通过几个小案例理重新回顾一下前面所写的内容,对面向对象的理解更加深刻的目的: 案例一: /* 需求: 定义一个员工类,自己分析出几个成员, 然后给出成员变量,构造方法,getXxx()/setXxx( ...

随机推荐

  1. 20160219.CCPP体系详解(0029天)

    程序片段(01):ReplaceAll.c 内容概要:ReplaceAll #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #incl ...

  2. Android开发艺术探索——第二章:IPC机制(中)

    Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...

  3. 有奖试读—Windows PowerShell实战指南(第2版)

    为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...

  4. Java基本语法-----java关键字

    1.1关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2常见的关键字 备注: 不必死记硬背 ...

  5. Android控制软键盘的弹出和隐藏

    弹出软键盘 前提:必须要有一个可以编辑的控件(EditText),并且当前已经获取焦点 /** * 弹出软键盘 */ public void openKeyboard(View view) { // ...

  6. Gradle 的Daemon配置

    最近升级到Android 2.2.2之后,运行之前的项目特别卡,基本上2分钟,好的时候1分半,查询了Android官网的说明说daemon能够加快编译.于是我也尝试开启Daemon. 在Windows ...

  7. 即时通讯软件openfire+spark+smack

    所以我基本上分为三篇文章来介绍此类软件的开发: 第一篇是关于XMPP 协议是啥,IM 是啥以及一个比较有名的开源实现,该开源实现包括三个部分(Spark.Smack和Openfire): 第二篇讲如何 ...

  8. UE4联机多人游戏基本设置

    UE4自带网络联机功能,但是似乎只有蓝图接口,而真正写功能的时候不能用C++,让人感觉相当诡异 还是作一个简单记录 1.建一个第三人称模板,为什么会用他呢,因为它自带模板的很多组件,直接支持联机功能, ...

  9. Android简易实战教程--第十七话《自定义彩色环形进度条》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52203533   点击打开链接 在Android初级教程里面,介绍了shape用法 ...

  10. antlr v4 使用指南连载1——简介

    antlr v4简介        antlr是一个强大语言解析工具,可以用于处理结构化文本.二进制文件.说白了,其实可以这么认为,antlr是一个更强大的正则表达式工具.它可以完成更多正则表达式无法 ...