需求说明:
模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。具体分析如下:
(1)共同的属性:姓名、年龄。
(2)共同的方法:吃饭。其中吃饭的内容两者不同,所以采用抽象的方法。
(3)不同的方法:队员练习,教练教导,分别写入队员类和教练类。
(4)接口:学习英语。
(5)抽象类:人类、运动员类、教练类、后两者继承自人类。
(6)具体类:乒乓球队员类、教练类和篮球队员类、教练类;分别继承远动员或教练类,其中乒乓球有关的扩展学习英语接口
程序运行结果:
实现思路:
(1)定义英语接口English,该接口中定义抽象方法speak(),返回值类型是void。
(2)定义抽象类Person,包括两个成员变量,分别是name 和 age。name是String 类型,age是int类型。定义两个构造方法,一个有参,一个无参。再定义一个抽象方法,eat(),返回值类型是void。最后定义一个show()方法,返回值是void。该方法中显示名称和年龄。
(3)定义抽象远动员类Player,它继承了Person抽象类。定义两个构造方法一个有参,一个无参注意应用super。再定义一个抽象方法student()。返回值是void。这是运动员类特有的方法。
(4)定义抽象教练类Coach,它继承了Person抽象类。定义两个构造方法一个有参,一个无参注意应用super。再定义一个抽象方法teacher()。返回值是void。这是运动员类特有的方法。
(5)定义乒乓球运动员类PingpangPlayer。它继承Player,同时实现English接口。
(6)定义乒乓球教练类PingpangCoach。它继承Coach,同时实现English接口。
(7)定义篮球运动员类BasketballPlayer。它继承Player。
(8)定义篮球教练类BasketballCoach。它继承Coach。
(9)定义测试类Test,在主方法中,分别实例化不同运动员和教练员并调用各自的方法。
实现代码:
English 接口:
//定义一个说英语的接口 public interface English { //说英语 void speak(); }
Person 抽象类:
public abstract class Persion { private String name;//姓名 private int age;//年龄 //无参构造 public Persion() { } //有参构造 public Persion(String name, int age) { this.name = name; this.age = age; } //吃饭的抽象方法 public abstract void eat(); //睡觉 public void sleep() { System.out.println("人的要睡觉的"); } //展示姓名和年龄 public void show() { System.out.printf("姓名:%s\t年龄:%d",name,age); System.out.println(); } 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 Persion{ //无参构造 public Player() { super(); } //有参构造方法 public Player(String name,int age) { super(); } //运动员学习的抽象类 public abstract void student(); }
Coach 教练类:
public abstract class Coach extends Persion { //无参构造 public Coach() { super(); } //有参构造方法 public Coach(String name,int age) { super(); } //教练教授的学习方法 public abstract void teacher(); }
PingpangPlayer 乒乓球运动员类:
public class PingpangPlayar extends Player implements English { @Override public void student() { System.out.println("乒乓球运动员要练习发球和接球技巧"); } @Override public void eat() { System.out.println("乒乓运动员吃清淡的饭菜"); } @Override public void speak() { System.out.println("乒乓球运动员要学习英语"); } }
PingpangCoach 乒乓球教练类:
public class PingpangCoach extends Coach implements English { @Override public void teacher() { System.out.println("乒乓球教练要教导队员发球和接球技巧"); } @Override public void eat() { System.out.println("乒乓球教练跟着队员吃清淡的饭菜"); } @Override public void speak() { System.out.println("乒乓球教练要学习英语"); } }
BasketballPlayer 篮球运动员类:
public class BasketballPlayer extends Player { @Override public void student() { System.out.println("篮球运动员要练习运球和投篮技巧"); } @Override public void eat() { System.out.println("篮球运动员要吃高蛋白的饭菜,保持健壮的身体"); } }
BasketballCoach 篮球教练类:
public class BasketballCoach extends Coach { @Override public void teacher() { System.out.println("篮球教练要跟着队员,要吃高蛋白的饭菜"); } @Override public void eat() { System.out.println("篮球教练要教导队员运球和投篮技巧"); } }
Test 测试类:
public class Test { public static void main(String[] args) { //实例化乒乓球运动员 PingpangPlayar pp = new PingpangPlayar(); pp.setName("马明"); pp.setAge(26); pp.show(); pp.eat(); pp.student(); pp.speak(); System.out.println("----------------------"); //实例化乒乓球教练 PingpangCoach pc = new PingpangCoach(); pc.setName("姚梁"); pc.setAge(38); pc.show(); pc.eat(); pc.teacher(); pc.speak(); System.out.println("----------------------"); //实例化篮球运动员 BasketballPlayer bp = new BasketballPlayer(); bp.setName("刘国"); bp.setAge(41); bp.show(); bp.eat(); bp.student(); System.out.println("----------------------"); //实例化篮球教练 BasketballCoach bc = new BasketballCoach(); bc.setName("杰克"); bc.setAge(42); bc.show(); bc.eat(); bc.teacher(); } }