super和this关键字对比详解

212 阅读3分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍superthis关键字的作用和对比。

super和this关键字

1. this关键字

this实际上就是指向当前对象本身的一个指针,使用this即表示调用当前类本身的对象。

this的使用场景一般有以下三种:

  1. 访问本类的成员变量。

    常在方法的参数名和类的属性名相同时调用。

    【例如】

    public class Test{
        private String s;
        public void printString(String s){
            System.out.println("我是传入的参数"+s);
            System.out.println("我是类的属性"+this.s);
        }
    }
    
  2. 访问本类的成员方法。

    访问本类的成员方法的使用和调用成员变量相同。

    【格式】

    this.printString();
    
  3. 调用本类的构造方法。

    有时需要在一个构造方法内调用本类的另一个构造方法,这时就可以使用this关键字。

    【格式】

    this.类名(参数列表);
    

    当使用了this后,该构造方法就不会在默认调用无参的super方法。

2. super关键字

super实际上就是指向本类的父类对象的指针,super的使用场景一般也是以下三种:

  1. 调用父类的成员变量。

    常用来调用被覆盖了的父类的成员变量。

    【格式】

    super.变量名;
    
  2. 调用父类的成员方法。

    常用来调用被重写了的父类的成员方法。

    【格式】

    super.方法名();
    
  3. 调用父类的构造方法。

    super关键字的一个很重要的作用就是调用父类的构造方法。如果不显式声明,则会默认调用父类无参的构造方法。

3. this关键字和super关键字的异同

了解了this和super的使用,那对于他们的区别和联系就显而易见了,总结为以下几点:

  1. 指向对象不同,this指向当前对象,super指向当前对象的父类对象。
  2. 使用方式相同,都是通过super.(this.)对象名来使用或是super()(this())来调用方法。
  3. 使用规则相同,super()和this()均需放在第一行,即两者不能同时使用。
  4. 使用环境相同,super和this均不能使用在含有static关键字的范围内。

还有super独有的特点也需要我们了解:

  1. super如果在构造方法内没有显示声明并且没有this(),则默认调用无参的super()。
  2. super用来调用被覆盖或重写的属性或方法。

小结

以上就是关于this和super关键字的各自作用和总结对比,希望能加深读者的理解,如有不正之处,欢迎留言指正。