主类:
import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Scanner; /** * @Description: 利用反射来加载类 * @author: Joker * @date: 2017年1月29日 下午8:30:26 */ public class Java_4 { public static void main(String[] args) { for (int i = 0; i < 10000; i++) { //键盘输入对应格式的数据 Scanner sc = new Scanner(System.in); System.out.println("请按格式输入数据"); String string = sc.nextLine(); // 正则表达式,根据空格拆分此字符串 String[] str2 = string.split(" "); // 获取对象名和A,B,C的值 String vehicleName = str2[2]; int A = Integer.valueOf(str2[3]); int B = Integer.valueOf(str2[4]); int C = Integer.valueOf(str2[5]); try { //获取输入的类的字节码文件对象 Class vehicleClass = Class.forName("com.cskaoyan.Day19_HomeWork." + vehicleName); //获取构造方法,并将键盘接受的数据传入对其进行初始化 Constructor constructor = vehicleClass.getConstructor(String.class, int.class, int.class, int.class); //创建接口对象。父类的引用指向子类的实例,实现多态 TansportMeans t = (TansportMeans) constructor.newInstance(vehicleName,new Integer(A), new Integer(B), new Integer(C)); //创建speed对象,实现对vehicleMethod方法的调用 Speed vehicle = new Speed(); vehicle.vehicleMethod(t); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } }接口及实现多态的类:
/** * @Description:创建接口,定义交通工具中特有的方法 */ interface TansportMeans { public abstract void getSpeed(); } /** * 创建speed类,利用vehicleMethod方法实现对各种交通工具类中getSpeed()方法的调用 */ class Speed { public void vehicleMethod(TansportMeans vehicle) { vehicle.getSpeed(); } }交通工具类:
/** * Car类的成员变量是vehicleName,A,B,C, * 为了接收键盘输入的数据,必须要有构造方法 * 要实现接口中的getSpeed方法,必须对ABC进行相应处理并输出 */ class Car implements TansportMeans { String vehicleName; int A, B, C; /** * @Description:car类构造方法,用于初始化类 */ public Car(String vehicleName, int a, int b, int c) { this.vehicleName = vehicleName; A = a; B = b; C = c; } /** * @Description:car类计算速度的方法 */ @Override public void getSpeed() { System.out.println(vehicleName + "的速度是:" + (A * B / C)); } } /** * plane类的成员变量是vehicleName,A,B,C, * 为了接收键盘输入的数据,必须要有构造方法 * 要实现接口中的getSpeed方法,必须对ABC进行相应处理并输出 */ class Plane implements TansportMeans { String vehicleName; int A, B, C; //构造方法 public Plane(String vehicleName, int a, int b, int c) { this.vehicleName = vehicleName; A = a; B = b; C = c; } @Override public void getSpeed() { System.out.println(vehicleName + "的速度是:" + (A + B + C)); } }最后,新增一个ship类,直接编写类ship.java,即可实现ship的速度的计算
class Ship implements TansportMeans { String vehicleName; int A, B, C; //构造方法 public Ship(String vehicleName, int a, int b, int c) { this.vehicleName = vehicleName; A = a; B = b; C = c; } @Override public void getSpeed() { System.out.println(vehicleName + "的速度是:" + ((A + B) * C)); } }控制台输出结果:
请按格式输入数据 java ComputeTime Car 23 34 45 Car的速度是:17 请按格式输入数据 java ComputeTime Plane 20 30 40 Plane的速度是:90 请按格式输入数据 java ComputeTime Ship 22 33 44 Ship的速度是:2420 请按格式输入数据