hbzhdy 2015-10-10 07:40 采纳率: 100%
浏览 3095
已采纳

Java JAR包中的类 父类方法不可见等

场景:
两个jar包分别为a.jar、b.jar。b.jar中引用了a.jar,具体为b.jar中的类B继承了a.jar中的类A。
A有两个方法,a.getName(),a.getAge(),B重写了getName方法,未重写getAge方法。
新建了一个Java项目C,**C只引用了b.jar,未引用a.jar**,于是出现了如下两个问题:
1、在C项目中,类B没有getAge方法
2、在C项目中,使用强制类型转换时(如)B b = (B)map.get("key"),会报错: - The type A cannot be resolved. It is indirectly referenced from required .class files
请教:1、构建子类对象时,继承自父类的方法为何没有加载?2、强制类型转换为何需要找A类?

追加:前提就是C项目不能引用a.jar。不然也不会发现这个问题。我知道引入a.jar可以解决这个问题。但是想知道为何必须引入a.jar。虚拟机加载b.jar中的类并创建对象时,难道不是把所有方法都准备好了吗?为什么还会有父类方法不可见的情况

  • 写回答

8条回答 默认 最新

  • 「已注销」 2015-10-10 08:17
    关注

    虚拟机类加载器在加载的时候有类的主动引用(一定会发生类的初始化)和被动引用(不会发生类的初始化)的区别
    如果你没有导入父类的jar包,类加载器将无法加载这个父类,当然也无妨将其初始化

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器