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

抽象类中this关键字的工作原理及私有字段访问疑问

问题解答

1. 为什么this能访问Test的私有字段fatherName?

私有字段确实不会被子类继承,但子类对象的内存空间里包含了父类的所有字段(包括私有),只是子类代码本身不能直接访问父类的私有字段。

而setFatherName()是Test类自己定义的方法,在Test类的作用域内,方法可以直接访问当前类的私有成员——不管this指向的是Test本身的实例,还是它的子类实例,只要这个方法属于Test类,就有权限访问Test的私有字段fatherName。

核心逻辑:权限检查看的是方法所在的类,而不是this指向的对象类型。

2. 抽象类中的this关键字如何工作?

this的本质始终是指向当前执行方法的那个对象实例:

  • 代码中new Person()创建的是Person类的实例,虽然用Test类型的变量person来引用,但实际运行时的对象是Person实例。
  • 调用person.setFatherName()时,执行的是Test类中的setFatherName方法,此时方法里的this就指向这个Person实例——所以this.getClass().getSimpleName()会输出Person。
  • 但因为setFatherName是Test类的方法,所以this在这个方法里可以访问Test类的所有成员(包括私有),哪怕this指向的是子类对象。

代码回顾

Test抽象类

abstract class Test {
    private String fatherName ;

    public void setFatherName(String fatherName){
        System.out.println(this.getClass().getSimpleName());
        this.fatherName=fatherName;
    }
    public String getFatherName(){
       return fatherName;
    }
}

Person子类

public class Person extends Test{
    public static void main(String[] args) {
        Test person = new Person(); // #2
        person.setFatherName("Jimmy");
        System.out.println("father name is : " +person.getFatherName());
    }
}

输出

Person
father name is : Jimmy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:14:58