Java Interface,反射

  先看代码,

  

package reflect;
//Class Word
public class Word implements OfficeAble{
	public static void main(String[] args){
		
	}
	public void start(){
		System.out.println("word...start...");
	}
	public Word(){

	}
}

package reflect;
//Class Excel
public 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 {
	@Test
	public 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即可。

posted @ 2015-05-05 14:01  Sunor  阅读(3079)  评论(0编辑  收藏  举报