* 反射应用
* 1.创建泛型接口和实现接口的方法
* 2.创建一个工厂类方法,根据参数对象返回不同的实例化类
* 3.通过主函数提供的完整类名获取各接口类的实现方法
* @author Administrator
*
*/
interface IFruit {
public void eat();
}
interface IGreens {
public void eat();
}
class Apple implements IFruit {
public void eat() {
System.out.println("吃苹果");
}
}
class Banana implements IFruit {
public void eat() {
System.out.println("吃香蕉");
}
}
class Lem implements IGreens {
public void eat() {
System.out.println("吃西红柿");
}
}
class Csl implements IGreens {
public void eat() {
System.out.println("吃黄瓜");
}
}
class Factory {
private Factory() {}
//返回值类型为泛型T,
public static <T> T getInstance(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
T obj= null;
obj = (T) Class.forName(className).newInstance(); //通过类文件名获取该类class信息并实例化该类
return obj;
}
}
class TestDemo {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
IFruit fruit = Factory.getInstance("cn.mldn.demo.Apple"); //把类文件作为参数调用工厂方法返回实例化的泛型类并通过向上转型设置泛型类型
fruit.eat();//父类访问子类重写方法
IGreens greens = Factory.getInstance("cn.mldn.demo.Csl"); //泛型转为IGreens
greens.eat();
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/*
* Contructors应用
*/
interface IMessage {}
interface IBlue {
void fun();
}
class Person implements IMessage,IBlue{
public void fun() {
System.out.println("fun()方法");
}
public Person(String name) {
System.out.println(name);
}
}
public class Test {
public static void main(String args[]) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
Class<?> cls = Person.class;
System.out.println(cls.getSuperclass()); //获取父类对象
Class<?>[] itf = cls.getInterfaces(); //获取类的实现接口方法
Constructor<?> conts[] = cls.getConstructors();//获取类的构造方法
Constructor<?> cont = cls.getConstructor(String.class); //获取有参构造(new String()).getClass()
// Object obj = cls.newInstance(); //调用无参构造实例化该类
cont.newInstance("张三");
for(int x = 0;x < itf.length;x ++) {
System.out.println(itf[x].getName());
}
for(int x = 0;x < conts.length;x ++) {
System.out.println(conts[x]);
}
}
}