Day 13 JavaObject03作业
作业:
1. 为某研究所编写一个通用程序,用来计算每一种交通工具运行 1000公里所需的时间.已知每种交通工具的参数都是3个整数常量A、B、C的表达式。
现有两种工具:Car 和Plane,
其中Car 的速度运算公式为:A*B/C,
Plane 的速度运算公式为 :A+B+C。
要求在未来如果增加第3种交通工具(如Ship)的时候,可以做到复用已有代码。
Ship的速度运算公式为 :A+B/C。
要求自己设计该系统,并测试。
2.
教练和运动员案例
乒乓球运动员和篮球运动员。
乒乓球教练和篮球教练。
为了出国交流,跟乒乓球相关的人员都需要学习英语。
请用所学知识:
分析,这个案例中有哪些抽象类,哪些接口,哪些具体类
乒乓球用运动员
属性 name age salary learnEnglish()
行为 eat() sleep() train() match()
篮球运动员
属性 name age salary
行为 eat() sleep() train() match()
乒乓球教练:
属性 nama age salary bonus
行为 eat(),sleep(), teach(),learnEnglish()
篮球教练:
属性 nama age salary bonus
行为 eat(),sleep(), teach()
参考答案:
1.
1 public interface TimeCalculator { 2 /* 3 * 该方法的作用是 计算某种交通工具,移动指定举例所花的时间 4 */ 5 double calculateTime(int distance); 6 } 7 8 /** 9 * 10 * 该类抽象所有,类型交通工具的共性,3个参数a, b, c, 同时,所有交通工具都需要计算所需的时间,该计算方法我放在了TimeCalculator接口中 11 */ 12 public abstract class Vehicle implements TimeCalculator { 13 14 /* 15 * 不管哪种交通工具都需要这些参数来计算自己的速度 16 */ 17 private int a; 18 private int b; 19 private int c; 20 21 public Vehicle(int a, int b, int c) { 22 this.a = a; 23 this.b = b; 24 this.c = c; 25 } 26 27 /* 28 * 获取某交通工具的速度的方法,因为每种交通工具速度的计算方式不一样 留给子类去实现就好了 29 */ 30 public abstract double getSpeed(); 31 32 /* 33 * 计算某种交通工具移动指定距离,锁需要的时间,该方法 我专门放在一个接口中声明,也可以不使用接口 34 * 35 * 因为只要知道了速度,和距离时间是按照相同的方式计算, 所以这里直接实现了计算时间的方法 36 */ 37 @Override 38 public double calculateTime(int distance) { 39 return distance / getSpeed(); 40 } 41 42 public int getA() { 43 return a; 44 } 45 46 public void setA(int a) { 47 this.a = a; 48 } 49 50 public int getB() { 51 return b; 52 } 53 54 public void setB(int b) { 55 this.b = b; 56 } 57 58 public int getC() { 59 return c; 60 } 61 62 public void setC(int c) { 63 this.c = c; 64 } 65 } 66 67 public class Car extends Vehicle { 68 69 public Car(int a, int b, int c) { 70 super(a, b, c); 71 } 72 73 @Override 74 public double getSpeed() { 75 return getA() + getB() + getC(); 76 } 77 } 78 79 public class Plane extends Vehicle { 80 public Plane(int a, int b, int c) { 81 super(a, b, c); 82 } 83 84 @Override 85 public double getSpeed() { 86 return 1.0 * getA() * getB() / getC(); 87 } 88 } 89 90 public class Ship extends Vehicle { 91 92 public Ship(int a, int b, int c) { 93 super(a, b, c); 94 } 95 96 @Override 97 public double getSpeed() { 98 return 1.0 * getA() + getB() / getC(); 99 } 100 } 101 102 public class Test { 103 104 public static void main(String[] args) { 105 106 TimeCalculator calculator = new Car(10, 20, 2); 107 System.out.println(calculator.calculateTime(1000)); 108 109 calculator = new Plane(10, 20, 2); 110 System.out.println(calculator.calculateTime(1000)); 111 112 calculator = new Ship(10, 20, 2); 113 System.out.println(calculator.calculateTime(1000)); 114 } 115 }
2.
1 /** 2 * 3 * Human中定义所有运动员和教练员都具有的属性 name age salary 行为 eat(), sleep() 4 */ 5 public class Human { 6 7 private String name; 8 private int age; 9 private int salary; 10 11 public Human() { 12 } 13 14 public Human(String name, int age, int salary) { 15 this.name = name; 16 this.age = age; 17 this.salary = salary; 18 } 19 20 public void eat() { 21 System.out.println(name + "吃饭"); 22 } 23 24 public void sleep() { 25 System.out.println(name + "睡觉"); 26 } 27 28 public String getName() { 29 return name; 30 } 31 32 public void setName(String name) { 33 this.name = name; 34 } 35 36 public int getAge() { 37 return age; 38 } 39 40 public void setAge(int age) { 41 this.age = age; 42 } 43 44 public int getSalary() { 45 return salary; 46 } 47 48 public void setSalary(int salary) { 49 this.salary = salary; 50 } 51 } 52 53 /** 54 * 55 * 定义运动员都具有的行为:train(), match() 虽然所有运动员都有这样的行为,但是不同的运动员,训练和比赛的内容都不相同, 56 * 所有Athlete类定义为抽象类 57 * 58 */ 59 public abstract class Athlete extends Human { 60 61 public abstract void train(); 62 63 public abstract void match(); 64 } 65 66 /** 67 * 68 * 定义教练都具有的行为:teach(),以及属性bonus 虽然所有教练都有这样的行为,但是不同的教练,教的内容都不相同, 所有Coach类定义为抽象类 69 */ 70 public abstract class Coach extends Human { 71 72 private int bonus; 73 74 public abstract void teach(); 75 76 public int getBonus() { 77 return bonus; 78 } 79 80 public void setBonus(int bonus) { 81 this.bonus = bonus; 82 } 83 } 84 85 public class TabletennisAthlete extends Athlete implements SpecialSkill { 86 87 @Override 88 public void train() { 89 System.out.println(getName() + " train table tennis"); 90 } 91 92 @Override 93 public void match() { 94 System.out.println(getName() + "match table tennis"); 95 } 96 97 @Override 98 public void leaningEnglish() { 99 System.out.println("athlete " + getName() + " learning english"); 100 } 101 } 102 103 public class TabletennisCoach extends Coach implements SpecialSkill { 104 105 @Override 106 public void teach() { 107 System.out.println(getName() + "teach table tennis"); 108 } 109 110 @Override 111 public void leaningEnglish() { 112 System.out.println("coach " + getName() + " learning english"); 113 } 114 } 115 116 public class FootballAthlete extends Athlete { 117 118 @Override 119 public void train() { 120 System.out.println(getName() + " train basketball"); 121 } 122 123 @Override 124 public void match() { 125 System.out.println(getName() + "match basketball"); 126 } 127 } 128 129 public class FootballCoach extends Coach { 130 131 @Override 132 public void teach() { 133 System.out.println(getName() + "teach basketball"); 134 } 135 }