速度计算-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)

该案例展示了如何使用Java的反射技术来创建一个速度计算程序,程序支持不同交通工具(如Bike和Plane)的速度计算,并通过接口Common进行抽象。用户输入交通工具名称后,程序能动态计算速度,新添加交通工具时无需修改原有代码。
摘要由CSDN通过智能技术生成

【案例12-2】:速度计算

【案例介绍】

1.案例描述

本案例要求使用反射技术编写一个速度计算程序,计算某种交通工具的行驶速度。现有两种工具:Bike和 Plane,其中Bike的速度运算公式为:A*B/C,Plane的速度运算公式为:A+B+C。

用户可通过输入交通工具名称选择自己想要使用的交通工具,选择交通工具之后,自动计算出该交通工具的行驶速度。此外,在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序即可。

2.运行结果

 

运行结果

【案例分析】

(1)通过任务描述可知,有两种交通工具Plane和Bike,对应的类为Plane类、Bike类。

(2)由于任务要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序,故还需要编写一个接口Common,且Plane类和Bike类都继承Common接口。

(3)最后编写一个测试类CaculateSpeed,在main()方法中,编写程序,提示用户输入自己想要使用的交通工具,并利用反射来计算交通工具的速度。

【案例实现】

Common.java

  1. public interface Common {
  2.      double getSpeed(double a,double b,double c);
  3. }

上述代码中,定义了一个Common接口,在Common接口中定义了一个抽象方法getSpeed()。

Bike.java

  1. public class Bike implements Common {
  2.      @Override
  3.      public double getSpeed(double a, double b, double c) {
  4.           return a*b/c;
  5.      }
  6. }

上述代码中,定义了一个Bike类并实现了Common接口,在Bike类中对getSpeed()方法方法进行了重写。

Plane.java

  1. public class Plane implements Common {
  2.      @Override
  3.      public double getSpeed(double a, double b, double c) {
  4.           return a+b+c;
  5.      }
  6. }

上述代码中,定义了一个Plane类并实现了Common接口,在Plane类中对getSpeed()方法进行了重写。

CaculateSpeed.java

  1. package chapter1202;
  2. import java.util.Scanner;
  3. public class CaculateSpeed {
  4.     public static void main(String[] args){
  5.         Scanner in = new Scanner(System.in);
  6.         System.out.println("请输入您要使用的交通工具名称:");
  7.         String choice =in.nextLine();
  8.         String transport = "fanshe."+choice; //fanshe”必须是当前类所在的包名
  9.         double a = 23, b = 24, c = 25;
  10.         try {
  11.             Common newtransport = (Common)
  12.                     Class.forName(transport).newInstance();
  13.             System.out.println(choice+" speed is : " +
  14.                     ""+newtransport.getSpeed(a,b,c));
  15.         } catch (InstantiationException e) {
  16.             e.printStackTrace();
  17.         } catch (IllegalAccessException e) {
  18.             e.printStackTrace();
  19.         } catch (ClassNotFoundException e) {
  20.             e.printStackTrace();
  21.         }
  22.     }
  23. }

上述代码中,定义了一个测试类CaculateSpeed,其中第7行代码声明了一个transport对象,用于获取全限定类名;第11~12行代码是通过反射对transport对象进行实例化。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yw1990128

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值