JAVA: 反射 实验 (天天向上系列)

题目:

(3)对类进行动态实例化 Class.forName() 
为某研究所编写一个通用程序,用来计算每一种交通工具运行 1000 公里所
需的时间,已知每种交通工具的参数都是 3 个浮点数 A、B、C 的表达式。现有
两种工具:Car 和 Plane,其中 Car 的速度运算公式为:A*B/C,Plane 的速度运
算公式为:A+B+C;需要编写三个类:ComputeTime、Plane、Car 和接口 Common,
要求在未来如果增加第 3 种交通工具的时候,不必修改以前的任何程序,只需要
编写新的交通工具的程序。 
动态实例化代码:             
Class.forName(args[0]).newInstance();             
注意事项: 
 参数 args[0]应该为完整的类名。 

 如果对类进行动态实例化,则该类可以不定义构造方法,或者是无参的。  


首先设置Common 类

public interface Common {
    double getSpeed(double a,double b,double c);
}

其次依次设置Car 和Plane

public class Car implements Common {
    @Override
    public double getSpeed(double a, double b, double c) {
        return a*b/c;
    }
}
public class Plane implements Common {

    @Override
    public double getSpeed(double a, double b, double c) {
        return a+b+c;
    }
}

最后在Computer 中 main 中测试调用

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner;

public class Computer {
    
    public static void main(String[] args){
   
        String transport = "Plane";
        double a = 23, b = 24, c = 25;
        try {
            Common newtransport = (Common) Class.forName(transport).newInstance();
            System.out.println(transport+"'s speed is : "+newtransport.getSpeed(a,b,c));
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }
}

1


猜你喜欢

转载自blog.csdn.net/sizaif/article/details/80735915
今日推荐