黑马程序员技术交流社区

标题: 用反射object调用方法为什么编译不报错 [打印本页]

作者: 白驹过隙11    时间: 2019-4-19 15:07
标题: 用反射object调用方法为什么编译不报错
package cn.itcast_04;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectDemo {
        public static void main(String[] args) throws Exception {
                // 获取字节码文件对象
                Class c = Class.forName("cn.itcast_01.Person");

                // 获取所有的方法
                // Method[] methods = c.getMethods(); // 获取自己的包括父亲的公共方法
                // Method[] methods = c.getDeclaredMethods(); // 获取自己的所有的方法
                // for (Method method : methods) {
                // System.out.println(method);
                // }

                Constructor con = c.getConstructor();
                Object obj = con.newInstance();

                /*
                 * Person p = new Person(); p.show();
                 */

                // 获取单个方法并使用
                // public void show()
                // public Method getMethod(String name,Class<?>... parameterTypes)
                // 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型
                Method m1 = c.getMethod("show");
                // obj.m1(); // 错误
                // public Object invoke(Object obj,Object... args)
                // 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数
                m1.invoke(obj); // 调用obj对象的m1方法
}

学习刘意老师的视频的时候有点小疑问,创建对象Object obj = con.newInstance();返回的是object类型
再调方法m1.invoke(obj); 不用遵循编译看父类的原则吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2