结合抽象类及接口实例

  1. 为某研究所编写一个通用程序,用来计算每一种交通工具运行 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("足球教练教足球");
   }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值