super和this

Posted 好多个码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了super和this相关的知识,希望对你有一定的参考价值。

super和this使用
我们在上一讲中学习到, 当子类创建对象的时候 会先执行父类的构造方法进行父类成员变量的初始化, 然后再进行子类成员的初始化, 也就是说会有两个空间的值要初始化, 一个是子类的, 一个是父类的.

那么请问, 一个堆内存中的对象其子类和父类的空间实怎么分布的呢? 一起探讨下...

父类空间优先于子类对象产生
在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。

代码体现在子类的构造方法调用时,一定先调用父类的构造方法。

public class Person{
    String name;
    int age;
    int money=100;
    public Person(){}
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
}
 
public class Chinese extends Person{
    String address;
    int money=200;
    public Chinese(){ }
    public Chinese(String name,int age,String address){
        super(name,age);
        this.address=address;
    }
}
public class Demo{
    public static void main(String[] args){
        Chinese c=new Chinese("Angela",18,"北京");
    }
}


super和this的含义
super :代表父类成员的存储空间标识

this :代表子类成员的存储空间标识

这里要特别注意的是 super 和 this 都在堆中同一个对象空间中.也就意味着, 首地址是一样得.

super和this的用法
     this(访问本类)    super(访问父类)
1. 成员变量    this.成员变量 ---->本类的成员变量    super.成员变量---->父类的成员变量
2. 成员方法    this.成员方法 ---->本类的成员方法    super.成员方法---->父类的成员方法
3. 构造方法    this(...) ---->本类的构造方法    super(...) ----> 父类的构造方法
小贴士

this和super很好区分, 只要是this的都是访问本类. 只要是super的都是访问父类.

在使用this和super访问构造方法时特别要注意:

子类的每个构造方法中均有默认的super( ),调用父类的空参构造。

super( ) 和 this( ) 都必须是在构造方法的第一行,所以不能同时出现.

手动显式调用父类构造会覆盖默认的super( )。

使用上面父类Person类和子类Chinese类实践下, 分辨实践下this和super的用法.
 

以上是关于super和this的主要内容,如果未能解决你的问题,请参考以下文章

java之this,super和代码块精选

不立即分离片段

Eclipse 插件片段

关键字this super final static

Java基础- super 和 this 解析

this和super