this和super的区别
一、this
1、this存储在堆内存当中对象的内部,每个对象都有自身的this。this是一个引用,this保存的是当前对象的内存地址,指向自身。
2、this只能出现在实例方法(包括get、set方法)和构造方法中,谁调用这个实例方法,this就是谁。所以this代表当前对象。
3、在定义实例方法中如果省略"this."语法,默认代表访问当前对象的属性或方法。"this."在区分局部变量和实例变量时不能省。
4、静态方法和静态代码块中不能使用this,因为它们的执行不需要对象,而this存在于对象中。
5、对于"this()"语法的使用只能在构造方法中的第一句,作用是在同一个类中通过构造方法调用其他构造方法,实现代码复用。
public Student(){ this("zby",22); }
public Student(String name,int age){ this.name=name; this.age=age; }
二、super
1、super不是引用,super代表"当前对象(this)"里面的父类型特征,super属于this的一部分。
2、super只能出现在实例方法和构造方法中,不能使用在静态方法和静态代码块中。
3、"super()"只能出现在构造方法中第一行。每一个类的构造方法中如果没有"super(实参)",其第一行都默认调用父类的无参构造"super()",Object类除外。
目的是:创建子类对象时,先初始化父类型特征,而不是创建新对象,实际上对象只创建了1个。
4、使用语法:
super.属性名 【访问父类的属性】
super.方法名(实参) 【访问父类的方法】
super(实参) 【调用父类的构造方法】