项目结构:
public class App {
public static void main(String[] args) throws Exception {
//创建propertis集合
Properties p = new Properties();
//通过类加载器获取student.properties文件信息并存储在集合中
p.load(App.class.getClassLoader().getResourceAsStream("com\\wn\\day16\\AAAzhongyao\\student.properties"));
//获取key为classname的value值
String classNameResult = p.getProperty("className");
//获取key为methodName的value值
String methodNameResult = p.getProperty("methodName");
//把全限定类名为com.wn.day16.AAAzhongyao.Student1的类加载进内存
Class clazz = Class.forName(classNameResult);
//创建该类的对象(多态格式Object obj = new Student1();)
Object obj = clazz.newInstance();
//向下转型,使用子类特有方法,向下转后又是接口多态格式:Student student = new Student1();
Student student = (Student) obj;
//获取method01()方法的对象,并指定形参为String类型(不能修改,因为Student中的method01()方法形参为String args)
Method method = clazz.getMethod(methodNameResult, String.class);
//执行studen的对象
method.invoke(student, "Tom");
}
}
public interface Student {
void method01(String args);
void method02(String args);
}
public class Student1 implements Student {
private String name = "Student1";
@Override
public void method01(String args) {
System.out.println(name + "..." + "method01" + "..." + args);
}
@Override
public void method02(String args) {
System.out.println(name + "..." + "method02" + "..." + args);
}
}
public class Student2 implements Student{
private String name = "Student2";
@Override
public void method01(String args) {
System.out.println(name + "..." + "method01" + "..." + args);
}
@Override
public void method02(String args) {
System.out.println(name + "..." + "method02" + "..." + args);
}
}
className=com.wn.day16.AAAzhongyao.Student1
methodName=method01
运行结果: