目  录 

一.this关键字

this:

为什么要有this关键字呢?

在非静态方法中,始终隐藏着一个对象this:

this关键字什么时候不能省略呢?

二.super关键字​

super:

为什么new子类会先调用父类的  构造方法  ?​

super关键字什么时候不能省略呢? 

 三.this关键字和super关键字的区别​

this关键字和super关键字的相同点!


一.this关键字

this:

        this代表 本类的引用 ,或者是指该类的一个对象,代表着方法的调用者,哪个对象调用的这个方法,方法中的this就代表这个对象.例如set,get 方法中的this:

public class Teacher {
    //定义私有成员变量
    private String name;
    private int age;
   
    //get,set方法中的this就代表了Teacher这个当前类,Teacher这个类调用的name这个属性
    public void setName(String name){
        this.name=name;                
    }
    public String getName(){
        
        return name;
    }

    public int getAge() {
        
        return age;
    }

    public void setAge(int age) {
        
        this.age = age;
    }

}

为什么要有this关键字呢?

当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题,如下图:

如果加入了this关键字,就会有如下效果: 

在非静态方法中,始终隐藏着一个对象this:

public class Test2 {
    int num=90;  

    public void a(){         
        System.out.println(this.num);      //这个this加或者不加都不会报错!
    }
}

this关键字什么时候不能省略呢?

在实例方法(例如set和gat方法)中或者构造方法中,需要区分局部变量和实例变量时,this便不能省略.

补:当前构造方法需要调用另一个本类构造方法时,"this();"这个语句需要放在构造方法的第一行.

二.super关键字

super:

        在类的方法中使用,代表 父类的空间表示或者父类的引用 .在子类中的方法使用super,可以 访问父类的数据(成员变量,成员方法).

为什么new子类会先调用父类的  构造方法  ?

每个子类的构造方法中的第一行,都有一条默认的super();语句去调用父类的空参构造方法先来完成父类的初始化.所以new子类时会先执行默认的隐藏的super();语句,就会先调用父类的构造方法.

public class Fu {      //定义父类
    public Fu(){
        System.out.println("父类构造方法执行了");
    }
}
public class Zi extends Fu {       //定义子类继承Fu类
    public Zi(){ 
        System.out.println("子类构造方法执行了");
    }
}
public class Test3 {
    public static void main(String[] args) {
        Zi z=new Zi();      //创建了一个子类对象
    }
}

输出结果:

super关键字什么时候不能省略呢? 

​​​​​​​子类与父类中存在同名的变量或属性,如果在子类中访问父类中的属性,那么super不可以省略!

 三.this关键字和super关键字的区别

  • this代表的是本类对象的引用
  • 调用成员变量 :       this.成员变量         调用本类的成员变量
  • 调用构造方法 :      this()     调用本类的无参构造方法    this(...)        调用本类的有参构造方法
  • 调用成员方法 :     this.成员方法         调用本类的成员方法
  • this可以单独使用.      例如System.out.println(this);

 

  • super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
  • 调用成员变量 :       super.成员变量     调用父类的成员变量
  • 调用构造方法 :      super()    调用父类的无参构造方法   super(...)       调用父类的构造方法
  • 调用成员方法 :     super.成员方法     调用父类的成员方法
  • super不可以单独使用,必须带一个.    例如:System.out.println(this);

注意:this();与super();两个不可共存,都存在的化会编译报错.

this关键字和super关键字的相同点!

  • 都可以存在实例方法和构造方法中.
  • 都不能使用在静态方法中.
  • 大部分情况下可以省略.
  • 只能出现在构造方法的第一行.

(小编也在努力学习更多哟!以后会多多分享哒!)

希望对友友们有所帮助!!!!