例、为某研究所编写一个通用程序,用来计算每一种交通工具行驶1000公里所需的时间。已知每种交通工具的参数都是3个整数A、B、C的表达式,现有两种工具Car007和Plane,其中Car007的速度计算公式为A*B/C,Plane的速度计算公式为A+B+C。需要编写三个类程序ComputeTime.java、Plane.java、Car007.java和一个接口程序Common.java,要求在未来如果增加第三种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。其运行过程如下,从命令行输入ComputeTime的四个参数,第一个是交通工具的类型,第二、三、四个参数分别是整数A、B、C,例如,计算Plane的时间“java ComputeTime Plane 20 30 40”,计算Car007的时间“java ComputeTime Car007 23 34 45”,如果第三种交通工具为Ship,则只需要编写Ship.java,运行时输入“java ComputeTime Ship 22 33 44”。提示:充分利用接口的概念,接口对象作为参数。实例化一个对象的另外一种办法是“Class.forName(str).newInstance()”,例如需要实例化一个Plane对象的话,则只需调用Class.forName(“Plane”).newInstance()。
main传参方法,空格间隔,都在args[]里
主类
import trafficway.*;
public class ComputeTime {
public ComputeTime() {
// TODO Auto-generated constructor stub
}
public static void main(String []args) {
if(args.length!=6) {
System.out.println("wrong");return;}//一定要有错误处理
String vehicleType=args[2];
int a=Integer.parseInt(args[3]);
int b=Integer.parseInt(args[4]);
int c=Integer.parseInt(args[5]);
Common vehicle;
if(vehicleType.equals("Plane")) {
vehicle=new Plane(a,b,c);
}else if(vehicleType.equals("Car007")) {
vehicle=new Car007(a,b,c);
//Class.forName("Car007").newInstance();
}
else {
System.out.println("Invalid vehicle type");
return;//一定要有,否则可能有未初始化错误
}
double speed=vehicle.getSpeed();
double time=1000/speed;
System.out.println("Time needed to run 1000km for this "+args[2]+" in speed:"+speed+" : "+time+"hours");
}
}
接口类 Common
package trafficway;
public interface Common {
double getSpeed();
}
package trafficway;
public class Car007 implements Common {
private
int A;
int B;
int C;
public Car007(int a,int b,int c) {
// TODO Auto-generated constructor stub
this.A=a;
this.B=b;
this.C=c;
}
@Override//重载一定要加
public double getSpeed(){
return A*B/C;
}
}
package trafficway;
public class Plane implements Common{
private
int A;
int B;
int C;
public Plane(int a,int b,int c) {
// TODO Auto-generated constructor stub
this.A=a;
this.B=b;
this.C=c;
}
@Override
public double getSpeed(){
return A+B+C;
}
}
运行结果
参考https://wenku.csdn.net/answer/26a784f313fc407bb498b5c8146ea590,感谢