- 为某研究所编写一个通用程序,用来计算每一种交通工具运行 1000公里所需的时间.已知每种交通工具的参数都是3个整数常量A、B、C的表达式。
现有两种工具:Car 和Plane,
其中Car 的速度运算公式为:A*B/C,
Plane 的速度运算公式为 :A+B+C。
要求在未来如果增加第3种交通工具(如Ship)的时候,可以做到复用已有代码。
Ship的速度运算公式为 :A+B/C。
这里复用已有代码的意思是,比如专门定义了一个方法,用来计算所有交通工具的,移动指定距离所用的时间
, 可以不改变这个方法,继续用它计算新增加的交通工具的运行时间
double calculateTime(int distance, 计算对象) {
return 计算结果
}
要求自己设计该系统,并测试。
package com.homework.homework0722;
/**
* @Author kinmon
* @Date 2020/7/22 15:14
* @Version 1.0
*/
public class Problem1 {
public static void main(String[] args) {
Vehicle vehicle;
vehicle = new Car();
System.out.println(calculateTime(vehicle));
vehicle = new Plane();
System.out.println(calculateTime(vehicle));
vehicle = new Ship();
System.out.println(calculateTime(vehicle));
}
//提供方法供子类覆盖//多态
public static double calculateTime(Vehicle vehicle) {
return 1.0 * 1000 / vehicle.speed();
}
}
abstract class Vehicle {
//也可通过成员变量set方式进行赋值 这里暂时不那样做
int A = 100;
int B = 180;
int C = 270;
abstract double speed();
}
class Car extends Vehicle {
@Override
public double speed() {
return (A*B/C);
}
}
class Plane extends Vehicle {
@Override
public double speed() {
return (A+B+C);
}
}
class Ship extends Vehicle {
@Override
public double speed() {
return (1.0*(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()
package com.homework.homework0722;
/**
* @Author kinmon
* @Date 2020/7/22 16:10
* @Version 1.0
*/
public class Problem2 {
public static void main(String[] args) {
AthletesPp athletesPp = new AthletesPp("张三",25,1000);
System.out.println("姓名-年龄-薪资");
System.out.println(athletesPp.getName()+"-"+athletesPp.getAge()+"-"+athletesPp.getSalary());
athletesPp.eat();
athletesPp.sleep();
athletesPp.train();
athletesPp.match();
athletesPp.learnEnglish();
System.out.println("------------------------------------------------------------------------");
AthletesFt athletesFt = new AthletesFt("李四",26,2000);
System.out.println("姓名-年龄-薪资");
System.out.println(athletesFt.getName()+"-"+athletesFt.getAge()+"-"+athletesFt.getSalary());
athletesFt.eat();
athletesFt.sleep();
athletesFt.train();
athletesFt.match();
System.out.println("------------------------------------------------------------------------");
CoachPp coachPp = new CoachPp("老六",29,3000,700);
System.out.println("姓名-年龄-薪资-奖金");
System.out.println(coachPp.getName()+"-"+coachPp.getAge()+"-"+coachPp.getSalary()+"-"+coachPp.getBonus());
coachPp.eat();
coachPp.sleep();
coachPp.teach();
coachPp.learnEnglish();
System.out.println("------------------------------------------------------------------------");
CoachFt coachFt = new CoachFt("赵七",30,4000,500);
System.out.println("姓名-年龄-薪资-奖金");
System.out.println(coachFt.getName()+"-"+coachFt.getAge()+"-"+coachFt.getSalary()+"-"+coachFt.getBonus());
coachFt.eat();
coachFt.sleep();
coachFt.teach();
System.out.println("------------------------------------------------------------------------");
}
}
abstract class Human {
private String name;
private int age;
private double salary;
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 double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
abstract public void eat();
abstract public void sleep();
public Human(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
}
abstract class Athletes extends Human {
public Athletes(String name, int age, double salary) {
super(name, age, salary);
}
abstract void train();
abstract void match();
}
abstract class Coach extends Human{
double bonus;
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
public Coach(String name, int age, double salary, double bonus) {
super(name, age, salary);
this.bonus = bonus;
}
abstract void teach();
}
interface LearnEnglish {
void learnEnglish();
}
class AthletesPp extends Athletes implements LearnEnglish {
public AthletesPp(String name, int age, double salary) {
super(name, age, salary);
}
@Override
public void eat() {
System.out.println("乒乓球运动员eating");
}
@Override
public void sleep() {
System.out.println("乒乓球运动员sleeping");
}
@Override
public void train() {
System.out.println("乒乓球运动员训练乒乓球");
}
@Override
public void match() {
System.out.println("乒乓球运动员进行乒乓球比赛");
}
@Override
public void learnEnglish() {
System.out.println("乒乓球运动员学习英语");
}
}
class AthletesFt extends Athletes {
public AthletesFt(String name, int age, double salary) {
super(name, age, salary);
}
@Override
public void eat() {
System.out.println("足球运动员eating");
}
@Override
public void sleep() {
System.out.println("足球运动员sleeping");
}
@Override
public void train() {
System.out.println("足球运动员训练足球");
}
@Override
public void match() {
System.out.println("足球运动员比赛足球");
}
}
class CoachPp extends Coach implements LearnEnglish {
public CoachPp(String name, int age, double salary, double bonus) {
super(name, age, salary, bonus);
}
@Override
public void eat() {
System.out.println("乒乓球教练eating");
}
@Override
public void sleep() {
System.out.println("乒乓球教练sleeping");
}
@Override
void teach() {
System.out.println("乒乓球教练教乒乓球");
}
@Override
public void learnEnglish() {
System.out.println("乒乓球教练学习英语");
}
}
class CoachFt extends Coach {
public CoachFt(String name, int age, double salary, double bonus) {
super(name, age, salary, bonus);
}
@Override
public void eat() {
System.out.println("足球教练eating");
}
@Override
public void sleep() {
System.out.println("足球教练sleeping");
}
@Override
void teach() {
System.out.println("足球教练教足球");
}
}