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的主要内容,如果未能解决你的问题,请参考以下文章