java习题 chp15_8 (反射)完成下面功能已知有接口定义如下:
8. **(反射)完成下面功能已知有接口定义如下:
public interface Person{
void setName(String name);
void setAge(int age);
void work();
}
1)为Person 创建两个实现类,一个Teacher 表示老师,一个Cook 表示厨师。在Teacher 类的work 方法中输出”Teacher teach”,在Cook 的work 方法中输出”Cook make meals”。2)创建一个配置文件,格式如下:
Teacher
tom
18
第一行表示相应的实现类;
第二行表示相应的名字
第三行表示相应对象的年龄
3)读取配置文件,根据配置文件的信息,创建相应的对象,并调用对象的work 方法。
Person.java
package chp15_8;
public interface Person {
void setName(String name);
void setAge(int age);
void work();
}
Cook .java
package chp15_8;
public class Cook implements Person{
private String name;
private int age;
@Override
public void setName(String name) {
// TODO Auto-generated method stub
this.name=name;
}
@Override
public void setAge(int age) {
// TODO Auto-generated method stub
this.age=age;
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("Cook make meals");
}
}
Teacher .java
package chp15_8;
public class Teacher implements Person{
private String name;
private int age;
@Override
public void setName(String name) {
// TODO Auto-generated method stub
this.name=name;
}
@Override
public void setAge(int age) {
// TODO Auto-generated method stub
this.age=age;
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("Teacher teach");
}
}
Test .java
package chp15_8;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Scanner sc = new Scanner(System.in);
System.out.println("输入Teacher or Cook");
String s = sc.next();
System.out.println("输入名字");
String name = sc.next();
System.out.println("输入年龄");
int age = sc.nextInt();
try {
//通过类名获取类对象
Class<?> c = Class.forName("chp15_8."+s);
//创建一个实例化对象
Object obj = c.newInstance();
//获取当前类型方法
Method setName = c.getMethod("setName", String.class);
Method setAge = c.getMethod("setAge", int.class);
Method work = c.getMethod("work");
//调用方法
work.invoke(obj);
setName.invoke(obj, name);
setAge.invoke(obj, age);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

浙公网安备 33010602011771号