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

如何解读作为参数传入的Getter方法?Java子类无引用调用解惑

理解Java中隐式this的实例方法调用

嘿,这个问题其实是Java里实例方法调用的隐式this引用在起作用,咱们一步步把逻辑拆明白:

核心原理:隐式的this前缀

在Java的实例方法(非static方法)内部,当你直接调用另一个实例方法或者访问实例变量时,编译器会自动帮你加上this.前缀。也就是说:

getName()

完全等价于:

this.getName()

这里的this代表的是当前正在执行该方法的对象实例——在你的场景里,就是调用writeFunction的那个ClassB对象。

结合你的代码场景分析

咱们对应你给出的代码来看:

  1. ClassB继承自ClassA,因此ClassB的实例会继承ClassA的所有非私有实例方法(包括getName()和writeFunction())。
  2. 当ClassB里执行writeFunction( getName() )时,编译器会把它转换为writeFunction( this.getName() )。
  3. 因为ClassB没有重写getName()方法,所以this.getName()会调用父类ClassA的getName()实现——这就是你觉得它指向ClassA方法的原因,本质是Java的方法查找规则:优先找子类的实现,找不到就往上找父类。

如果ClassB重写了getName(),比如:

class ClassB extends ClassA {
    @Override
    String getName() {
        return "ClassB's name";
    }
    
    void someMethod() {
        writeFunction( getName() ); // 这里会调用ClassB自己的getName()
    }
}

那此时getName()就会调用子类的版本,进一步验证了this指向当前对象实例的逻辑。

总结

这种直接调用实例方法的写法是Java的标准语法,是为了简化代码的语法糖。只要是在实例方法内部,所有对实例成员(方法/变量)的访问,默认都会隐式使用this引用,不需要手动写出对象引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:02