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 }
原文地址:https://www.cnblogs.com/dust2017/p/12791523.html