您的位置:首页 > 编程语言 > Java开发

java习题 chp15_8 (反射)完成下面功能已知有接口定义如下:

2020-06-06 06:35 169 查看

文章目录


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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐