老师,实现接口的类的实例调用他类中的方法时,其实调用的都是他的实现类中的方法?
老师,实现接口的类的实例调用他类中的方法时,其实调用的都是他的实现类中的方法?
8
收起
正在回答 回答被采纳积分+1
2回答
芝芝兰兰
2019-10-20 10:37:47
同学你好。
1、Dao 和 DaoImpl 的关系:是接口与实现类的关系。
因为一般的接口可以有多个实现类。所以使用接口来声明实例对象,等到运行到new时才真正知道具体是哪个实现类。这一过程表现了运行时多态。此时这个实例对象调用的方法是new这里指定的实现类实现的。
2、而JDK的动态代理是一个代理类,这个proxy实例是通过反射机制仿造了一个Impl的“增强版”,传入的参数实际上是UserDaoImpl的实例。
通过这个proxy调用的方法如何执行,同样要由代理类来决定:
代理类的规则是所有的方法都通过invoke实现调用。
这里的invoke通过反射,知道了指定调用的方法method,以及这个方法指定的参数们args。根据自己实现的规则进行增强,而直到return method.invoke(userDao,args)时,才是真正的执行方法之时。这里的userDao实际上是创建这个proxy时传入的UserDaoImpl的实例,所以执行的方法还是UserDaoImpl中实现的方法
如果解答了同学的疑问,望采纳~
祝学习愉快~
SSM主流框架入门与综合项目实战2018版
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星