You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法访问Java子类U1的public方法getMaxWeight?

问题解决:子类方法无法通过父类引用访问

你遇到的问题是Java向上转型的编译时类型检查限制:你把U1的实例赋值给了Rocket类型的变量U1a,编译器在编译阶段只会根据变量的声明类型(Rocket)来判断可调用的方法,而getMaxWeight()是U1子类新增的、父类Rocket中没有定义的方法,因此编译器无法识别这个调用。

两种解决方法

  • 方法一:直接声明变量为子类类型
    把变量的声明类型改成U1,编译器就能直接识别子类的所有方法:

    U1 U1a = new U1();
    int x = U1a.getMaxWeight();
    
  • 方法二:向下转型(必须使用父类类型变量时)
    先判断变量实际是否为U1实例,再通过强制类型转换调用子类方法,避免抛出类型转换异常:

    Rocket U1a = new U1();
    if (U1a instanceof U1) {
        int x = ((U1) U1a).getMaxWeight();
    }
    

补充说明

父类引用指向子类对象时,只能调用父类已定义的方法(如果子类重写了该方法,运行时会执行子类的实现),但子类独有的方法无法直接通过父类引用调用,这是Java编译时类型检查的规则。

内容的提问来源于stack exchange,提问作者Trish Bennett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:38:11