public class Test1 { public void func() { System.out.println("func"); } public static void main(String args[]) throws Exception { Object obj = new Test1(); // 下面是能通过的 ((Test1) obj).getClass().newInstance().func(); // 下面是不能通过的下面这两行代码之所以无法通过编译 /* Class c = ((Test)obj).getClass(); c.newInstance().func(); 是因为((Test)obj).getClass()返回的为对象类型为Class<? extends Test>,但是我们在第一行将结果强制转换成了Class, 然后再去调用Class的newInstance方法,而不是去调用Class<Test>的newInstance方法, 编译器当然不再认为Class的newInstance方法返回的对象为Test了。 */ /* * Class c=((Test1)obj).getClass(); * c.newInstance().func(); */ Class<? extends Test1> c = ((Test1)obj).getClass(); c.newInstance().func(); }}
?