题目:
人有梦想,但梦想是可以改变的,人在不同的时期可能有不同的梦想,梦想空想,梦想是要靠实际行动去完成的。
下面我们用多态的方式来阐述一下人在不同时期梦想的变化。人在整个人生进程中梦想改变的过程。注意梦想改变的时候人生进程不能停止。
创建一个接口Dream代表梦想接口,该接口中有一个无返回类型的 work()方法。表示梦想要做的事情。
编写两个实现类实现Dream接口。
编写一个Human人类,人有名字和梦想,人能够给其他人介绍他自己名字和说出他的梦想。
要求程序运行的时候,可以通过配置文件动态的改变的人类的梦想接口的实现类。(也可设置年龄为100岁,大于100梦想就结束!)
要求改变的时候程序不能停止
Human.java
package teacher.day08.dream;
public class Human {
public String name;
public Dream dream;
public void info() {
System.out.print("我的名字是:" + name);
dream.work();
}
public Human() {
}
public Human(String name, Dream dream) {
this.name = name;
this.dream = dream;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Dream getDream() {
return dream;
}
public void setDream(Dream dream) {
this.dream = dream;
}
}
SuperManDream接口实现类
package teacher.day08.dream;
public class SuperManDream implements Dream {
@Override
public void work() {
System.out.println("我的梦想是-->当一个超人!");
}
}
CodeDream接口实现类
package teacher.day08.dream;
public class CodeDream implements Dream {
@Override
public void work() {
System.out.println("我的梦想是做一个-->程序猿");
}
}
Dream接口
package teacher.day08.dream;
public interface Dream {
void work();
}
配置文件dream.properties信息
#\u68A6\u60F3\u7684\u5168\u8DEF\u5F84
superDream =teacher.day08.dream.SuperManDream
codeDream = teacher.day08.dream.CodeDream
human = teacher.day08.dream.Human
humanName = 小猴猴
测试类:
package teacher.day08.dream;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class Test01 {
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
//定义人的岁数,每隔5年换一次梦想(这里500毫秒代替)
int age = 100;
System.out.println("开始你的梦想之旅吧!");
while (true) { //当人死后梦想终结
String myDream = null;
Properties properties = new Properties();
properties.load(new FileReader("src\\teacher\\day08\\dream\\dream.properties"));
if(age%10==0){
myDream = properties.getProperty("codeDream");
Thread.sleep(500);
}else{
Thread.sleep(500);
myDream = properties.getProperty("superDream");
}
age -= 5;
if(age<=0){
System.out.println("人已死亡,梦想终结!");
break;
}
String humanPath = properties.getProperty("human", "teacher.day08.dream.Human");
String humanName = properties.getProperty("humanName", "小狗子");
//获取Class
Class<?> dreamClass = Class.forName(myDream);
//创建对象
Object dreamInstance = dreamClass.newInstance();
//获取Class
Class<?> humanClass = Class.forName(humanPath);
Object humanInstance = humanClass.newInstance();
//使用Class对象根据方法名与参数类型获取方法
Method setDreamMethod = humanClass.getDeclaredMethod("setDream", Dream.class);
Method setNameMethod = humanClass.getDeclaredMethod("setName", String.class);
Method infoMethod = humanClass.getDeclaredMethod("info");
//human.setDream(dream);
Object invoke = setDreamMethod.invoke(humanInstance, dreamInstance);
//human.setName("旺财");
Object runSetName = setNameMethod.invoke(humanInstance, humanName);
// human.info();
Object runInfo = infoMethod.invoke(humanInstance);
}
}
}
运行结果: