Java加载动态类

对于类的加载有两种

  1. 静态加载:编译时加载类
  2. 动态加载:通过Class.forName(“类的全称”)可以在运行时刻加载一个类

例如:有Word、Excel两个类(将来也许有PPT类)如果希望运行时刻在Office类中使用Word或者Excel对象,就可以这样:

Class c = Class.forName("Word");
Word word = (Word)c.newInstance();

或者

Class c = Class.forName("Excel");
Excel excel = (Excel)c.newInstance();

然后调用Word(或者Excel)的方法。

因为不能预先知道需要实例化的对象是Word还是Excel,所以强制类型转换时并不能很好的选取要实例化的类。

因此,我们可以让Word,Excel都去实现接口OfficeAble,从而可以将代码改为

OfficeAble oa = (OfficeAble)c.newInstance();

然后就可以调用 oa 中的方法,从而不必去理会需要实例化的是Word还是Excel,因为父类引用可以指向子类实例对象

如果将来要实例化的是PPT,只要PPT去实现接口OfficeAble即可像使用Word那样在运行时刻实例化PPT的对象

Office.java

public class Office{
	
	public static void main(String []args){
		try{
			Class c = Class.forName(args[0]);
			OfficeAble oa = (OfficeAble)c.newInstance();
			oa.start();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

OfficeAble.java

interface OfficeAble{
	public void start();
}

Word.java

public class Word implements OfficeAble{
	
	public void start(){
		System.out.println("word");
	}
}

Excel.java

public class Excel implements OfficeAble{
	public void start(){
		System.out.println("excel");
	}
}

猜你喜欢

转载自blog.csdn.net/innocent_jia/article/details/89042962