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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵