Java中super与this关键字的用途及区别详解

 更新时间:2025年04月28日 08:31:36   作者:暮乘白帝过重山  
这篇文章主要介绍了Java中super与this关键字的用途及区别的相关资料,super和this是Java中用于引用父类和当前对象的特殊关键字,文中通过代码介绍的非常详细,需要的朋友可以参考下

super关键字

super是Java中的一个引用变量,用于引用直接父类对象。

主要用途:

  • 访问父类的成员变量:当子类和父类有同名变量时

    super.variableName;
  • 调用父类的方法:特别是当子类重写了父类方法时

    super.methodName();
  • 调用父类的构造器:必须在子类构造器的第一行

    super();
    // 或
    super(parameters);

this关键字

this是Java中的一个引用变量,用于引用当前对象。

主要用途:

  • 引用当前对象的成员变量:解决局部变量与成员变量同名的问题

    this.variableName = variableName;
  • 调用当前类的方法:明确调用当前类的方法

    this.methodName();
  • 调用当前类的构造器:必须在构造器的第一行

    this();
    // 或
    this(parameters);
  • 作为参数传递:将当前对象作为参数传递

    method(this);

super与this的区别

特性superthis
引用对象父类对象当前对象
使用场景主要用于继承关系中可用于任何类中
调用构造器必须位于子类构造器第一行必须位于构造器第一行
访问权限只能访问父类可见的成员可以访问当前类所有成员
链式调用不能链式调用(super.super非法)可以链式调用(this.this非法)
静态上下文不能在静态方法/块中使用不能在静态方法/块中使用

代码示例

class Parent {
    String name = "Parent";
    
    void display() {
        System.out.println("Parent's display");
    }
}

class Child extends Parent {
    String name = "Child";
    
    Child() {
        this("Default"); // 调用本类的另一个构造器
    }
    
    Child(String name) {
        super(); // 调用父类构造器
        this.name = name;
    }
    
    void display() {
        System.out.println("Child's display");
    }
    
    void show() {
        System.out.println(super.name); // 访问父类的name
        System.out.println(this.name);  // 访问本类的name
        super.display();               // 调用父类的display
        this.display();                 // 调用本类的display
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child("Test");
        child.show();
    }
}

输出结果:

Parent
Test
Parent's display
Child's display

总结

  • 使用super主要是为了在子类中明确访问父类的成员,避免与子类成员混淆

  • 使用this主要是为了在类内部明确访问当前对象的成员,避免与局部变量混淆

  • 两者都可以用于构造器调用,但都必须位于构造器的第一行

  • 在静态上下文中,两者都不能使用

到此这篇关于Java中super与this关键字的用途及区别详解的文章就介绍到这了,更多相关Java中super与this关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JVM类运行机制实现原理解析

    JVM类运行机制实现原理解析

    这篇文章主要介绍了JVM类运行机制实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • java中MultipartFile和File最简单的互相转换示例

    java中MultipartFile和File最简单的互相转换示例

    这篇文章主要给大家介绍了关于java中MultipartFile和File最简单的互相转换的相关资料,MultipartFile和File都是Java中用于处理文件上传的类,MultipartFile用于处理上传的文件,File用于处理本地磁盘上的文件,需要的朋友可以参考下
    2023-09-09
  • SpringBoot实现无限级评论回复的项目实践

    SpringBoot实现无限级评论回复的项目实践

    本文主要介绍了SpringBoot实现无限级评论回复的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • SpringBoot中的@ConditionalOnMissingBean注解使用详解

    SpringBoot中的@ConditionalOnMissingBean注解使用详解

    这篇文章主要介绍了SpringBoot中的@ConditionalOnMissingBean注解使用详解,@ConditionalOnMissingBean作用在@Bean定义上,也就是说在容器加载它作用的Bean时,检查容器中是否存在目标类型,需要的朋友可以参考下
    2024-01-01
  • Springboot FeignClient调用Method has too many Body parameters解决

    Springboot FeignClient调用Method has too m

    本文主要介绍了Springboot FeignClient微服务间调用Method has too many Body parameters 解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java和Android崩溃捕获机制

    Java和Android崩溃捕获机制

    这篇文章主要为大家介绍了Java和Android崩溃捕获机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • java中switch选择语句代码详解

    java中switch选择语句代码详解

    这篇文章主要介绍了java中switch选择语句代码详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java实战之飞翔的小鸟小游戏

    Java实战之飞翔的小鸟小游戏

    这篇文章主要介绍了Java实战之飞翔的小鸟小游戏,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • idea自定义快捷代码生成模板的方法

    idea自定义快捷代码生成模板的方法

    这篇文章主要介绍了idea自定义快捷代码生成模板的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring Boot整合JWT的实现步骤

    Spring Boot整合JWT的实现步骤

    本文主要介绍了Spring Boot整合JWT,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论