/** * 行為,區(qū)別于動物 * @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; } /** * 構(gòu)造方法要傳皮膚顏色,以區(qū)分不同的人種 * @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("發(fā)生意外,創(chuàng)造一個不知道什么的人"); Constructor constructor = humanClass.getConstructor(SkinType.class);//構(gòu)造方法 human = (Human) constructor.newInstance(SkinType.getSkinType());//通過構(gòu)造方法創(chuàng)建一個對象 }else{ System.out.println("女媧創(chuàng)造一個 "+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);//執(zhí)行接口方法 Method pm = humanClass.getDeclaredMethod("selfMethod");//獲得私有方法 pm.setaccessible(true);//可訪問 pm.invoke(human, null);//執(zhí)行私有方法 } } /** * 將首字符改為大寫 * @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(); } }
女媧創(chuàng)造一個 YellowHuman女媧創(chuàng)造一個 BlackHuman女媧創(chuàng)造一個 WhiteHuman女媧創(chuàng)造一個 WhiteHuman發(fā)生意外,創(chuàng)造一個不知道什么的人女媧創(chuàng)造一個 BlackHuman女媧創(chuàng)造一個 YellowHuman女媧創(chuàng)造一個 WhiteHuman我是黑人,我的皮膚顏色是:yellow女媧創(chuàng)造一個 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
新聞熱點
疑難解答