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();
		}
		
	}
}

posted @ 2020-03-19 23:14  shellxx  阅读(322)  评论(0)    收藏  举报