/** * 行为,区别于动物 * @author tomsnail * @date 2015年4月1日 上午10:10:42 */public interface Behaviour{ public void eat(); public void sleep(); public void think(); public void sport(); public void work();}
import java.util.Random;/** * 皮肤类型 * @author tomsnail * @date 2015年4月1日 上午11:41:33 */public enum SkinType{ yellow,white,black; public static SkinType getSkinType(){ int r = new Random().nextInt(3); switch(r){ case 0:return SkinType.yellow; case 1:return SkinType.white; default:return SkinType.black; } }}
public abstract class Human implements Behaviour{ PRivate String name; private short age; private short sex; private SkinType skin; public String getName() { return name; } public void setName(String name) { this.name = name; } public short getAge() { return age; } public void setAge(short age) { this.age = age; } public short getSex() { return sex; } public void setSex(short sex) { this.sex = sex; } public SkinType getSkin() { return skin; } public void setSkin(SkinType skin) { this.skin = skin; } /** * 构造方法要传皮肤颜色,以区分不同的人种 * @author tomsnail * @date 2015年4月1日 上午10:06:48 */ public Human(SkinType skin) { this.skin = skin; this.name = skin.toString()+"_"+Goddess.counter++; }}
public class WhiteHuman extends Human{ public WhiteHuman() { super(SkinType.white); } public WhiteHuman(SkinType skinType) { super(skinType); System.err.println("我是白人,我在"); } @Override public void eat() { System.err.println("我是白人,我在eat"); } @Override public void sleep() { System.err.println("我是白人,我在sleep"); } @Override public void think() { System.err.println("我是白人,我在think"); } @Override public void sport() { System.err.println("我是白人,我在sport"); } @Override public void work() { System.err.println("我是白人,我在work"); } private void selfMethod(){ System.out.println("这是白人私有方法"); }}
public class YellowHuman extends Human{ public YellowHuman() { super(SkinType.yellow); } public YellowHuman(SkinType skinType) { super(skinType); System.err.println("我是黄种人,我的皮肤颜色是:"+skinType); } @Override public void eat() { System.err.println("我是黄种人,我在eat"); } @Override public void sleep() { System.err.println("我是黄种人,我在sleep"); } @Override public void think() { System.err.println("我是黄种人,我在think"); } @Override public void sport() { System.err.println("我是黄种人,我在sport"); } @Override public void work() { System.err.println("我是黄种人,我在work"); } private void selfMethod(){ System.out.println("这是黄种人私有方法"); }}
public class BlackHuman extends Human{ public BlackHuman() { super(SkinType.black); } public BlackHuman(SkinType skinType) { super(skinType); System.err.println("我是黑人,我的皮肤颜色是:"+skinType); } @Override public void eat() { System.err.println("我是黑人,我在eat"); } @Override public void sleep() { System.err.println("我是黑人,我在sleep"); } @Override public void think() { System.err.println("我是黑人,我在think"); } @Override public void sport() { System.err.println("我是黑人,我在sport"); } @Override public void work() { System.err.println("我是黑人,我在work"); } private void selfMethod(){ System.out.println("这是黑人私有方法"); }}
/** * 女娲 * @author tomsnail * @date 2015年4月1日 上午10:20:16 */public class Goddess { public static int counter = 0; private static final String[] humanClasss = new String[]{"com.tomsnail.java.test.reflec.BlackHuman","com.tomsnail.java.test.reflec.WhiteHuman","com.tomsnail.java.test.reflec.YellowHuman"}; //小伙伴 private List<Human> companions = new ArrayList<Human>(); private static final int number = 10; /** * 造人 * @author tomsnail * @date 2015年4月1日 上午10:21:03 */ public void createHuman(){ int i=number; while(--i>0){ String className = randomHuman(); try { Class humanClass = Class.forName(className); Human human = null; if(System.currentTimeMillis()%i==1){ System.out.println("发生意外,创造一个不知道什么的人"); Constructor constructor = humanClass.getConstructor(SkinType.class);//构造方法 human = (Human) constructor.newInstance(SkinType.getSkinType());//通过构造方法创建一个对象 }else{ System.out.println("女娲创造一个 "+humanClass.getSimpleName()); human = (Human) humanClass.newInstance(); } companions.add(human); } catch (Exception e) { e.printStackTrace(); } } } private String randomHuman(){ int r = new Random().nextInt(3); return humanClasss[r]; } /** * 生活 * @author tomsnail * @date 2015年4月1日 上午10:27:09 */ public void life() throws Exception{ while(true){ try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } Human human = companions.get(new Random().nextInt(number-1)); Class humanClass = human.getClass(); Field[] fs = humanClass.getSuperclass().getDeclaredFields();//父类属性 for(Field f:fs){ System.out.println(f.getName()+":"+humanClass.getMethod("get"+getMethodName(f.getName())).invoke(human, null));//打印出父类属性值 } Method[] ms = humanClass.getSuperclass().getInterfaces()[0].getMethods();//获得接口方法 Method m = ms[new Random().nextInt(ms.length)]; m.invoke(human, null);//执行接口方法 Method pm = humanClass.getDeclaredMethod("selfMethod");//获得私有方法 pm.setaccessible(true);//可访问 pm.invoke(human, null);//执行私有方法 } } /** * 将首字符改为大写 * @author tomsnail * @date 2015年4月1日 上午11:40:48 */ private static String getMethodName(String fildeName) throws Exception{ byte[] items = fildeName.getBytes(); items[0] = (byte) ((char) items[0] - 'a' + 'A'); return new String(items); } public static void main(String[] args) throws Exception { Goddess goddess = new Goddess(); goddess.createHuman(); goddess.life(); } }
女娲创造一个 YellowHuman女娲创造一个 BlackHuman女娲创造一个 WhiteHuman女娲创造一个 WhiteHuman发生意外,创造一个不知道什么的人女娲创造一个 BlackHuman女娲创造一个 YellowHuman女娲创造一个 WhiteHuman我是黑人,我的皮肤颜色是:yellow女娲创造一个 WhiteHumanname:white_7age:0sex:0skin:white我是白人,我在work这是白人私有方法name:white_3age:0sex:0skin:white我是白人,我在eat这是白人私有方法name:white_2我是白人,我在workage:0sex:0skin:white这是白人私有方法name:yellow_0我是黄种人,我在thinkage:0sex:0skin:yellow这是黄种人私有方法name:black_1我是黑人,我在work
新闻热点
疑难解答