当前位置: 首页 > java >正文

【Java面试题】——this 和 super 的区别

在这里插入图片描述

🎁个人主页:User_芊芊君子
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:【Java】内容概括

在这里插入图片描述
在这里插入图片描述
【前言】

在Java的世界里,thissuper是两个非常重要且容易混淆的关键字。无论是在日常开发还是面试环节,它们都是高频考点。今天,我们就来深入剖析 this 和 super 的区别与联系,帮助大家在面试中轻松应对相关问题,同时在实际编码中也能灵活运用。

文章目录:

  • 一、什么是this 和 super
    • 1.this关键字
    • 2.super关键字
  • 二、this 和 super 的区别
  • 三、代码示例
  • 四、注意事项
  • 五、总结

一、什么是this 和 super

1.this关键字

this关键字代表当前对象的引用,它指向调用当前方法的对象。在类的方法中,使用 this 可以明确地访问当前对象的属性和方法,尤其是在方法参数与类的成员变量同名的情况下, this 可以避免歧义。

2.super关键字

super 关键字用于访问父类的成员,包括父类的属性、方法和构造函数当子类中存在与父类同名的成员时,通过 super 可以访问父类的同名成员,避免子类对父类成员的隐藏和覆盖带来的访问不便。

二、this 和 super 的区别

当问到什么和什么的区别时,我们就要从他们的相同点中去找到不同的地方
【相同点】

  • 都是Java中的关键字
  • 只能在类的非静态方法中使用,用来访问非静态成员方法和字段,因为静态的是不依赖对象的
  • 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

【不同点】

对比维度this关键字super关键字
本质含义指向当前对象的引用指向父类对象的引用
访问属性访问当前对象的属性访问父类的属性
调用方法调用当前对象的方法调用父类的方法
调用构造函数调用本类的其他构造函数调用父类的构造函数
使用场景解决成员变量与局部变量重名问题、链式调用构造函数子类重写父类方法后仍需调用父类方法、子类构造函数调用父类构造函数
存在限制不能在静态方法和静态代码块中使用不能在静态方法和静态代码块中使用

三、代码示例

父类

public class Base {public int a = 10;public int b = 20;
}

子类

public class Derived extends Base{public int a = 100;public int b = 200;public void method(){System.out.println(this.a);System.out.println(this.b);System.out.println(super.a);System.out.println(super.b);}
}

调用子类函数

public class Test {public static void main(String[] args) {Derived derived = new Derived();derived.method();}
}

执行结果
在这里插入图片描述

四、注意事项

  • 静态环境限制: this 和 super都不能在静态方法和静态代码块中使用,因为静态成员属于类本身,而不是某个具体的对象,不存在当前对象和父类对象的概念。
  • 构造函数调用顺序: 在子类的构造函数中, super() (调用父类无参构造函数)或 super(参数)(调用父类有参构造函数)必须是构造函数的第一行代码,否则会编译报错。而 this() 调用本类其他构造函数时同样需要放在第一行,所以super() 和 this() 不能同时出现在一个构造函数中。

五、总结

this 和 super 虽然都是Java中的关键字,但它们的作用和使用场景有着明显的区别。this主要用于操作当前对象的属性和方法,解决变量重名和构造函数链式调用问题;而 super 则专注于访问父类的成员,处理子类与父类成员的继承和覆盖关系。掌握好这两个关键字的使用,不仅能够提升我们的代码质量,还能在Java面试中脱颖而出。

在这里插入图片描述

http://www.xdnf.cn/news/6006.html

相关文章:

  • PHP黑白胶卷底片图转彩图功能 V2025.05.15
  • Stable Diffusion WebUI 插件大全:功能详解与下载地址
  • 【软件测试】:推荐一些接口与自动化测试学习练习网站(API测试与自动化学习全攻略)
  • 配置Nginx解决http host头攻击漏洞【详细步骤】
  • Dockerfile实战:从零构建自定义CentOS镜像
  • Python爬虫实战:研究进制流数据,实现逆向解密
  • 【优选算法 | 字符串】字符串模拟题精选:思维+实现解析
  • 【python实用小脚本-59】连续刷题7天,手动整理编程题目效率低下,Python代码5分钟搞定,效率提升80%(附方案)
  • 力扣刷题Day 48:盛最多水的容器(283)
  • Linux操作系统中的SOCKET相关 - Socket字节序调整与网络传输
  • Kubernetes 标签和注解
  • 【软件测试】第一章·软件测试概述
  • 行动算子(知识)
  • GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)
  • 服务器中存储空间不足该怎么办?
  • IP协议的特性
  • 大白话解释联邦学习
  • skolelinux系统详解
  • Proxmox VE 8.4.0显卡直通完整指南:NVIDIA Tesla T4 实战
  • 什么是懒加载?
  • 06_java常见集合类底层实现
  • unity 制作某个旋转动画
  • 分割一切(SAM) 论文阅读:Segment Anything
  • 用vue和go实现登录加密
  • 科研领域开源情报应用:从全球信息网络到创新决策
  • 微机原理|| 流水灯实验
  • 两种常见的C语言实现64位无符号整数乘以64位无符号整数的实现方法
  • 【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历
  • Apifox使用方法
  • Xianyu AutoAgent,AI闲鱼客服机器人