news 2026/9/30 5:44:49

Java继承:成员变量访问(就近原则+this/super用法)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java继承:成员变量访问(就近原则+this/super用法)

Java 中继承时,成员变量的访问规则跟方法完全不同,是初学者最容易混淆的地方之一。

核心一句话:

成员变量访问遵循“就近原则 + 编译期静态绑定”
(子类有同名变量 → 直接用子类的;没有才用父类的;this和super是强制指定访问范围的工具)

1. 成员变量 vs 方法 的本质区别(最关键对比)

维度成员变量(字段)成员方法(非静态)
同名时叫什么隐藏(hiding)重写(overriding)
决定用哪个的时机编译期(看引用类型)运行期(看实际对象类型)
多态下表现看左边(引用类型)看右边(实际类型)
能否通过 super可以访问父类被隐藏的变量可以调用父类被重写的方法
this.字段访问当前类声明的字段(就近)—
super.字段强制访问直接父类声明的字段强制调用直接父类的方法

2. 就近原则 + this + super 规则详解

规则总结(子类中访问成员变量时):

  1. 直接写变量名(如age)
    → 找**当前类(子类)**有没有声明age
    → 有 → 用子类的
    → 没有 → 去父类找(递归向上,直到 Object)

  2. this.age
    → 强制找**当前类(子类)**有没有声明age
    → 有 → 用子类的
    → 没有 → 编译错误(this 不会向上找)

  3. super.age
    → 强制找直接父类有没有声明age
    → 有 → 用父类的
    → 没有 → 继续向上找爷爷类(super 也会向上递归,直到找到或报错)

3. 经典代码示例(强烈建议自己运行验证)

classFather{Stringname="父亲";intage=50;Stringhobby="钓鱼";}classSonextendsFather{Stringname="儿子";// 隐藏了父类的 nameintage=20;// 隐藏了父类的 age// hobby 没有重新声明,继承父类的voidprintAll(){System.out.println("直接写变量名:");System.out.println(name);// 儿子(就近 → 子类自己的)System.out.println(age);// 20System.out.println(hobby);// 钓鱼(子类没有 → 父类的)System.out.println("\nthis. 强制当前类:");System.out.println(this.name);// 儿子System.out.println(this.age);// 20// this.hobby // 编译错误!当前类没声明 hobby,this 不向上找System.out.println("\nsuper. 强制直接父类:");System.out.println(super.name);// 父亲System.out.println(super.age);// 50System.out.println(super.hobby);// 钓鱼}}publicclassTest{publicstaticvoidmain(String[]args){Sons=newSon();s.printAll();// 多态引用(最容易错的地方)Fatherf=newSon();// 父类引用 → 子类对象System.out.println("\n多态下:");System.out.println(f.name);// 父亲!(看引用类型 Father)System.out.println(f.age);// 50System.out.println(f.hobby);// 钓鱼// f 是 Father 类型,所以它看到的都是 Father 声明的字段}}

输出结果:

直接写变量名: 儿子 20 钓鱼 this. 强制当前类: 儿子 20 super. 强制直接父类: 父亲 50 钓鱼 多态下: 父亲 50 钓鱼

4. 常见面试/易错点速查

问题正确答案
子类声明了同名变量,父类的变量还能访问吗?可以,用super.变量名
this.变量名一定访问子类的吗?是的,如果子类声明了;否则编译错误(this 不向上找)
多态下父引用.变量访问的是谁的?父类的(编译期看引用类型 → 静态绑定)
成员变量有方法重写那样的动态绑定吗?没有!成员变量永远是静态绑定(编译期决定)
private 成员变量会被子类隐藏吗?不会,子类根本看不到 private 成员,更谈不上隐藏
static 成员变量呢?也是静态绑定,看引用类型;但 static 变量不建议用继承方式访问

5. 实际开发建议(经验之谈)

  • 尽量避免子类和父类出现同名成员变量(非常容易制造 bug)
  • 如果业务上必须同名,优先用 getter/setter访问,而不是直接访问字段
  • 想明确访问父类成员 →永远用 super.(清晰、可读性高)
  • 想访问当前类自己的 → 用this.(尤其局部变量遮蔽成员变量时)
  • 代码审查时看到大量super.xxx或同名字段 → 考虑是否设计有问题

一句话记住:

方法看右边(动态),字段看左边(静态)
就近原则只在直接写变量名时生效,this 锁当前类,super 锁直接父类

有哪种特殊情况还想再验证?比如:

  • 多层继承(爷爷-父亲-儿子)同名变量怎么找
  • static 变量 + 继承的访问规则
  • 接口中的 default 方法 + 字段(Java 8+)
  • 内部类中 this 和 super 的特殊用法

随时追问~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 10:04:06

实测对比后!千笔·专业学术智能体,行业天花板级的AI论文平台

你是否曾为论文选题发愁,面对海量文献无从下手?是否在深夜反复修改却总感觉表达不够专业?论文写作不仅是学术能力的考验,更是时间与精力的拉锯战。对于MBA学生而言,既要兼顾工作,又要完成高质量的学术论文&…

作者头像 李华
网站建设 2026/9/29 10:03:54

Java计算机毕设之基于SpringBoot的二手交易系统基于vue+springboot的二手交易平台(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/9/29 10:03:55

Java毕设选题推荐:基于SpringBoot的二手商品交易平台基于SpringBoot的二手交易系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/9/29 10:04:09

学长亲荐10个降AI率工具 千笔帮你轻松降AIGC

AI降重工具,让论文更自然 在当前学术写作中,AI生成内容的普及让许多同学面临一个共同难题——如何降低AIGC率,同时保持论文的逻辑性和语义通顺。尤其是对于本科生而言,论文不仅是对知识的总结,更是对个人能力的展示。…

作者头像 李华
网站建设 2026/9/29 10:03:55

怎么把C盘的文件移到D盘?c盘转移文件到d盘方法图文教程

电脑已经深入到我们生活的每一个角落,无论你是沉浸在游戏的世界中,还是忙于办公软件的操作,电脑都是离不开的。但是,电脑C盘的文件积累过多,如果不及时处理,很可能会出现空间不足的情况。那么,怎…

作者头像 李华
网站建设 2026/9/29 10:15:46

Java毕设项目推荐-基于SpringBoot实现的智慧就业管理系统基于springboot的大学就业信息管理系统企业信息管理、招聘信息管理【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华