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
相关产品推荐
相关产品推荐

