题目:
我国现有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,乒乓球相关人员都需要学习英语。
乒乓球运动员(PingPangPlayer) 属性:姓名,年龄 行为:学打乒乓球,说英语
篮球运动员(BasketballPlayer) 属性:姓名,年龄 行为:学打篮球
乒乓球教练(PingPangCoach) 属性:姓名,年龄 行为:教打乒乓球,说英语
篮球教练(BasketballCoach) 属性:姓名,年龄 行为:教打篮球
首先分析并做出关系图:
分析:可以有两种情况,一,教练继承教练类,运动员继承运动员类,创建说英语接口,乒乓球相关人员执行调用。二,乒乓球相关人员继承乒乓球类,篮球相关人员继承篮球类,创建学和教两个接口,分别是运动员和教练执行调用。综上所述两者继承结构相差不大,但是第一种继承关系只需要创建一个接口,更节省资源,所以我们选择第一种继承结构。
接下来进行画图,由下往上画出关系图:
如上图所示
接下来根据关系图从关系图最上方开始往下编码:
Person类:
//因为创建Person对象也没有意义,所以我直接把Person类定义为抽象类
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;
}
}
Player类:
public abstract class Player extends Person {
public Player() {
}
public Player(String name, int age) {
super(name, age);
}
public abstract void study();
}
Coach类:
public abstract class Coach extends Person {
public Coach() {
}
public Coach(String name, int age) {
super(name, age);
}
public abstract void teach();
}
接下来编写接口English:
public interface English {
public abstract void speakEnglish();
}
继续编写剩余子类:
PingPangPlayer类:
public class PingPangPlayer extends Player implements English {
public PingPangPlayer() {
}
public PingPangPlayer(String name, int age) {
super(name, age);
}
@Override
public void speakEnglish() {
System.out.println("乒乓球运动员说英语");
}
@Override
public void study() {
System.out.println("乒乓球运动员学打乒乓球");
}
}
BasketballPlayer类:
public class BasketballPlayer extends Player{
public BasketballPlayer() {
}
public BasketballPlayer(String name, int age) {
super(name, age);
}
@Override
public void study() {
System.out.println("篮球运动员学打篮球");
}
}
PingPangCoach类:
public class PingPangCoach extends Coach implements English {
public PingPangCoach() {
}
public PingPangCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("乒乓球教练教打乒乓球");
}
@Override
public void speakEnglish() {
System.out.println("乒乓球教练说英语");
}
}
BasketballCoach类:
public class BasketballCoach extends Coach {
public BasketballCoach() {
}
public BasketballCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("篮球教练教打篮球");
}
}
最后编写测试类Test:
public class Test {
public static void main(String[] args) {
//创建对象乒乓球运动员
PingPangPlayer ppp = new PingPangPlayer("龙少", 21);
ppp.study();
ppp.speakEnglish();
System.out.println(ppp.getName() + ", " + ppp.getAge());
System.out.println("---------------------");
//创建对象篮球运动员
BasketballPlayer bp = new BasketballPlayer("小杰", 20);
bp.study();
System.out.println(bp.getName() + ", " + bp.getAge());
System.out.println("---------------------");
//创建对象乒乓球教练
PingPangCoach ppc = new PingPangCoach("小胖", 36);
ppc.teach();
ppc.speakEnglish();
System.out.println(ppc.getName() + ", " + ppc.getAge());
System.out.println("---------------------");
//创建对象篮球教练
BasketballCoach bc = new BasketballCoach("大姚", 37);
bc.teach();
System.out.println(bc.getName() + ", " + bc.getAge());
System.out.println("---------------------");
}
}