標籤:
先看代碼,
package reflect;//Class Wordpublic class Word implements OfficeAble{public static void main(String[] args){}public void start(){System.out.println("word...start...");}public Word(){}}package reflect;//Class Excelpublic class Excel implements OfficeAble{public static void main(String[] args){}public void start(){}public Excel(){}}package reflect;//OfficeAble介面,由Word和Excel等類來實現public interface OfficeAble {public void start();}//測試方法package reflect;import org.junit.Test;public class Test01 {@Testpublic void testor() throws ClassNotFoundException, InstantiationException, IllegalAccessException{//動態載入類,在運行時刻載入//Class a = Class.forName("reflect.Word");Class a = Class.forName("reflect.Excel");System.out.println("a:"+a);//a:class reflect.Excel//通過類類型,建立該類對象OfficeAble oa = (OfficeAble)a.newInstance();oa.start();}}
java介面的好處是顯而易見的,比如Class Word和Class Excel都是實現了OfficeAble介面,那麼比如要調用Word.start()方法的時候,執行個體化Word類的時候,不一定強制轉換為Word,而是可以直接強制轉換為OfficeAble類型,然後調用start()方法。唯一需要多做的工作就是在Class.forName()的時候需要傳入要具體使用的類,在這個例子中傳入的參數就是 "package.ClassName",即"reflect.Word";而如果需要執行個體化的是Excel,那麼只要在載入類的時候吧ClassName修改為Excel即可。
Java Interface,反射