Java面试题之this 和 super 的区别解析

 更新时间:2025年05月15日 09:22:56   作者:User_芊芊君子  
this 和 super 虽然都是Java中的关键字,但它们的作用和使用场景有着明显的区别,下面给大家介绍Java面试题之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面试中脱颖而出。

到此这篇关于Java面试题this 和 super 的区别的文章就介绍到这了,更多相关java this和super区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot项目通过redis实现接口的幂等性

    Springboot项目通过redis实现接口的幂等性

    这篇文章主要为大家介绍了Springboot项目通过redis实现接口的幂等性,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 教你怎么用idea创建web项目

    教你怎么用idea创建web项目

    好多朋友在使用IDEA创建项目时,总会碰到一些小问题.现在我们就演示一下使用IDEA创建web项目的完整步骤吧.文中有非常详细的图文示例哦,,需要的朋友可以参考下
    2021-05-05
  • Spring Boot jar中没有主清单属性的解决方法

    Spring Boot jar中没有主清单属性的解决方法

    这篇文章主要介绍了Spring Boot jar中没有主清单属性的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 不到十行实现javaCV图片OCR文字识别

    不到十行实现javaCV图片OCR文字识别

    识别图片中的文字,会省很多时间,本文介绍了javaCV图片OCR文字识别,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java二叉树中LCA问题解决方法两则

    Java二叉树中LCA问题解决方法两则

    这篇文章主要介绍了Java二叉树中LCA问题解决方法,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2022-12-12
  • java double保留两位小数问题

    java double保留两位小数问题

    在Java中,可以使用DecimalFormat或String.format来保留double类型数字的两位小数,这两个方法都会进行四舍五入
    2025-03-03
  • 使用Spring动态修改bean属性的key

    使用Spring动态修改bean属性的key

    这篇文章主要介绍了使用Spring动态修改bean属性的key方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java自动释放锁的三种实现方案

    Java自动释放锁的三种实现方案

    在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,下面这篇文章主要给大家介绍了关于Java自动释放锁的三种实现方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Spring cloud restTemplate 传递复杂参数的方式(多个对象)

    Spring cloud restTemplate 传递复杂参数的方式(多个对象)

    这篇文章主要介绍了Spring cloud restTemplate 传递复杂参数的方式(多个对象),需要的朋友可以参考下
    2018-05-05
  • Java后端向前端返回文件流实现下载功能

    Java后端向前端返回文件流实现下载功能

    后端可以使用Java中servlet提供的HttpServletResponse,核心步骤是要设置响应的数据类型,设置为某一类文件类型或二进制格式,以及响应头,然后用ServletOutputStream将文件以流的形式发送到前端,本文介绍Java后端向前端返回文件流实现下载功能,感兴趣的朋友一起看看吧
    2023-12-12

最新评论