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关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Idea Jrebel 报错:Cannot reactivate,offline seat in use

    Idea Jrebel 报错:Cannot reactivate,offline 

    本文主要介绍了Idea Jrebel 报错:Cannot reactivate,offline seat in use,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • idea创建springboot项目(版本只能选择17和21)的解决方法

    idea创建springboot项目(版本只能选择17和21)的解决方法

    idea2023创建spring boot项目时,java版本无法选择11,本文主要介绍了idea创建springboot项目(版本只能选择17和21),下面就来介绍一下解决方法,感兴趣的可以了解一下
    2024-01-01
  • 深入理解Java 类加载全过程

    深入理解Java 类加载全过程

    这篇文章主要介绍了深入理解Java 类加载全过程的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java值传递和引用传递详解

    Java值传递和引用传递详解

    这篇文章主要为大家详细介绍了Java值传递和引用传递,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • java制作简单的坦克大战

    java制作简单的坦克大战

    坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象思想的提高,推荐给大家。
    2015-03-03
  • 解决idea update project 更新选项消失的问题

    解决idea update project 更新选项消失的问题

    这篇文章主要介绍了解决idea update project 更新选项消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 教你Spring Cloud保证各个微服务之间调用安全性

    教你Spring Cloud保证各个微服务之间调用安全性

    在微服务的架构下,系统会根据业务拆分为多个服务,各自负责单一的职责,在这样的架构下,我们需要确保各api的安全性,今天通过本文给大家分享Spring Cloud中如何保证各个微服务之间调用的安全性,需要的朋友参考下吧
    2021-08-08
  • 23种设计模式(12)java模版方法模式

    23种设计模式(12)java模版方法模式

    这篇文章主要为大家详细介绍了23种设计模式之java模版方法模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • java调用webService接口的代码实现

    java调用webService接口的代码实现

    本文主要介绍了java调用webService接口的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Java基础之内部类与代理知识总结

    Java基础之内部类与代理知识总结

    今天带大家复习Java的基础知识,文中有非常详细的介绍及图文示例,对正在学习Java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06

最新评论