使用场合:不知道具体要去实例化那个类的对象,通常这个参数由用户传入。即类名不确定!
使用方法:
- Class newTraffic = Class.forName("Car");
- Traffic t= (Traffic)newTraffic.newInstance();
说明:
1、newTraffic为定义的一个变量,类型为Class,用来保存我们动态创建对象实例的类名;
2、forName()这个方法传入的参数是类名,即Car是我们定义好的一个类,返回的是Car这个类;
3、newInstance()即为实例化一个对象,注意它无参数,即它默认调用一个不带参的构造方法,如果你没定义这个不带参的构造方法,系统会调用默认的不带参的构造方法;
4、(Traffic)newTraffic.newInstance(); 这里使用了强制类型转换,如果不进行转换,它默认返回一个原生的Object,这个Object无法调用Car类的任何方法;
5、Traffic是我们定义的一个接口,其中有Car和Plane等具体的类来实现这个接口中的方法。后面可以通过t来调用接口中的方法,当然这个方法的具体实现是放到Car或者Plane等类中的,这样就好比是我们动态创建了Car类,然后调用它里面的一些方法。说得有点通俗,这个在Java里称为接口回调