如何解读作为参数传入的Getter方法?Java子类无引用调用解惑
理解Java中隐式
this的实例方法调用 嘿,这个问题其实是Java里实例方法调用的隐式this引用在起作用,咱们一步步把逻辑拆明白:
核心原理:隐式的this前缀
在Java的实例方法(非static方法)内部,当你直接调用另一个实例方法或者访问实例变量时,编译器会自动帮你加上this.前缀。也就是说:
getName()
完全等价于:
this.getName()
这里的this代表的是当前正在执行该方法的对象实例——在你的场景里,就是调用writeFunction的那个ClassB对象。
结合你的代码场景分析
咱们对应你给出的代码来看:
- ClassB继承自ClassA,因此ClassB的实例会继承ClassA的所有非私有实例方法(包括
getName()和writeFunction())。 - 当ClassB里执行
writeFunction( getName() )时,编译器会把它转换为writeFunction( this.getName() )。 - 因为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
相关产品推荐
相关产品推荐

