简单的讲就是,每个类(Class对象)加载进内存,会在方法区生成包含方法各种信息的数据结构,并在堆区生成一个java.lang.Class对象,作为访问方法区数据的入口。每个类对象都有一个方法表,里面存放了方法签名等信息,如果子父类含有同样的方法,那么它们在方法区的索引位置会是一样的,如果是接口和接口实现类位置就不一样了。所以,如果是父类作为子类的引用,那么在类解析阶段其实就获得了父方法签名的索引位置,在真正创建对象时,通过指向真正对象的指针从而找到对象的方法表,并根据偏移位置确定调用方法,如果之类方法不存在,往父类上去找。接口和子父类稍有不同,接口会扫描这个方法表找到方法的索引。
点赞 评论

相关推荐

牛客网
牛客企业服务