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

Java中如何通过构造函数添加方法?匿名内部类方法无法访问的解决办法

问题原因

你写的代码里,变量lon的声明类型是RegularAxis,而returnHello()是匿名内部类独有的方法——编译器只会识别声明类型中定义的方法,所以无法直接调用这个新增方法。

可行的实现方式

1. 使用局部内部类替代匿名内部类

先定义一个继承自RegularAxis的局部类,再创建实例并调用方法:

// 定义局部内部类
class HelloAxis extends RegularAxis {
    public String returnHello() {
        return "hello";
    }
}

// 创建实例并调用方法
HelloAxis lon = new HelloAxis();
lon.returnHello();

2. 利用Java 10+的var自动推断类型

var会自动识别变量的实际类型(即匿名内部类类型),而非父类RegularAxis,这样就能直接调用新增方法:

var lon = new RegularAxis(){
    public String returnHello(){
        return "hello";
    }
};

lon.returnHello();

3. 直接调用匿名内部类的方法(无需赋值给变量)

如果不需要复用这个实例,可以直接在创建匿名内部类后调用方法:

new RegularAxis(){
    public String returnHello(){
        return "hello";
    }
}.returnHello();

4. 修改父类添加方法(若有权限)

如果可以修改RegularAxis类,直接在父类中定义returnHello()方法(或抽象方法、默认方法),匿名内部类重写后即可通过父类引用调用:

// 修改RegularAxis类
class RegularAxis {
    // 可以是普通方法、抽象方法或默认方法
    public String returnHello() {
        return "默认内容";
    }
}

// 匿名内部类重写并调用
RegularAxis lon = new RegularAxis(){
    @Override
    public String returnHello(){
        return "hello";
    }
};

lon.returnHello();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:36:42