案例:运动员和教练
需求:我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,跟乒乓球都需要英语学习,
请用所学的知识分析,这个案例中有哪些具体的类,哪些抽象类,哪些借口,并用代码实现
思路:
- …:代表无惨,带参构造器,
- 接口:英语接口,抽象方法是:说英语()
- 定义抽象人类:姓名,年龄…以及get/set方法,吃饭方法
- 定义教练类,继承人类: …教()
- 定义运动员类,继承人类:。。。。学习()
- 定义具体的篮球教练类,继承教练类: … 重写吃饭,教
- 定义具体的乒乓球教练类,继承教练类,实现说英语接口: …重写吃饭方法(){} 教(){} 重写英语方法(){}
- 定义具体的篮球运动员类,继承运动员类:… 重写吃饭方法(){},重写学习方法(){}
- 定义具体的乒乓球运动员类,继承运动员类,实现说英语接口:… 重写吃饭方法(){},重写学习方法(){},重写说英语方法(){}
- 定义测试类,写代码测试
方法:
- 分析方法: 一定从具体到抽象!!!由底向上
- 实现方法: 一定是从抽象到具体!! 由上到底
== !!!!! 使用(测试):使用的是具体的类的对象==
各层关系结构:
代码实现图:
注意接口和抽象类图标
代码块:
SpeakEnglish(接口)
package CCom.Cnn;
public interface SpeakEnglish {
void english();//提供说英语行为方法(可采纳不采纳)
}
Coach(抽象类)父
package CCom.Cnn;
public abstract class Coach extends Person {
public Coach() {
}
public Coach(String name, int age) {
super(name, age);
}
public abstract void Coach();
}
Player(抽象类)父
package CCom.Cnn;
public abstract class Player extends Person{
public Player() {
}
public Player(String name, int age) {
super(name, age);
}
public abstract void play();
}
Person(抽象类)爷
package CCom.Cnn;
public 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 eat(){
System.out.println("吃");
}
}
BasketballCoach(具体类)孙
package CCom.Cnn;
public class BasketballCoach extends Coach{
public BasketballCoach() {
}
public BasketballCoach(String name, int age) {
super(name, age);
}
@Override
public void Coach() {
System.out.println("教如何三步上篮");
}
@Override
public void eat() {
System.out.println("教练吃饭");
}
}
BasketballPlayer(具体类)孙
package CCom.Cnn;
public class BasketballPlayer extends Player {
public BasketballPlayer() {
}
public BasketballPlayer(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("打完球吃饭");
}
@Override
public void play() {
System.out.println("正在打篮球");
}
}
PingPangCoach(具体类)子
package CCom.Cnn;
public class PingPangCoach extends Coach implements SpeakEnglish{
public PingPangCoach() {
}
public PingPangCoach(String name, int age) {
super(name, age);
}
@Override
public void Coach() {
System.out.println("教我们打乒乓球");
}
@Override
public void english() {
System.out.println("正在说英语");
}
@Override
public void eat() {
System.out.println("教练正在吃饭");
}
}
PingPangPlayer(具体类)子
package CCom.Cnn;
public class PingPangPlayer extends Player implements SpeakEnglish{
public PingPangPlayer() {
}
public PingPangPlayer(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("在吃饭饭");
}
@Override
public void play() {
System.out.println("正在打乒乓");
}
@Override
public void english() {
System.out.println("说英语");
}
}
Demo测试类
package CCom.Cnn;
public class Demo {
public static void main(String[] args) {
//带参构造和属性私有分别写一下,并且注意了一定采用继承方式来使用实现!!
//继承方式是为了减少反复使用重复的代码
//1
BasketballCoach b = new BasketballCoach("沸羊羊",17);
System.out.println(b.getName()+b.getAge());
b.eat();
b.Coach();
System.out.println("------------------");
//2
BasketballPlayer b2=new BasketballPlayer();
b2.setName("美羊羊");
b2.setAge(18);
System.out.println(b2.getName()+b2.getAge());
b2.eat();
b2.play();
System.out.println("------------------");
//3
PingPangCoach p=new PingPangCoach("喜羊羊",19);
System.out.println(p.getName()+p.getAge());
p.eat();
p.Coach();
p.english();
//4 八嘎呀路 最后一个自己写去
}
}
输出的结果:
沸羊羊17
教练吃饭
教如何三步上篮
美羊羊18
打完球吃饭
正在打篮球
喜羊羊19
教练正在吃饭
教我们打乒乓球
正在说英语