mybatis jdk动态代理接口时碰到的继承问题

背景:

基类指针指向派生类对象

 

仍然调用了基类同名方法

 

 

基类方法没有mybatis query注解处理名叫entity对象,再一次看出调用的基类的方法

 

 

 

问题:

1 为什么基类的方法也被mybatis代理了

在 jdk动态代理源码底层(jdk生成字节码及5种字节码生产方式比较)中指出,jdk动态代理使用Class.getMethod方法

getMethods()会获取到本类及所有基类的public方法

 

2 为什么会出现基类和派生类两个方法,而没有覆盖

 

⼦类和⽗类的⽅法必须要具有相同的函数名称、参数列表,并且⼦类的返回值与⽗类相同或者是⽗类返回类型的⼦类型(jdk1.5之后)
--------------------------------------------------------
链接:https://wenku.baidu.com/view/d3dcb0025bfb770bf78a6529647d27284b7337e9.html

 

 

3 为什么调用基类而不是派生类方法,明明派生类方法的参数范围更小更精准

这与java 重载优先级有点关系,更复杂的是涉及到继承,不研究,应避免,这也是所有改写方法要加@Override的原因

 

 

 

 

posted on 2022-05-11 17:06  silyvin  阅读(82)  评论(0)    收藏  举报