一. 简单概述:
this代表的是当前对象,例:谁调用实例方法,this就代表谁。
super代表的是调用父类对象。如super.父类成员变量。调用的是父类的成员变量
二. this的常用地方:
在JavaBean建立setter()方法中
public class Employee {
private String num;
private String name;
private double salary;
public void setNum(String num) {
this.num = num;
}
public void setName(String name) {
this.name = name;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
也可以用于构造器中调用自己其他的构造器。但必须放在第一行。因此不能再显示的调用父类的构造器,只能隐式的调用
父类的无参构造器。
public class Employee {
private String num;
private String name;
private double salary;
public Employee() {
}
public Employee(String num, String name){
//此方法的调用,一般规定某项为常用的,默认的数据,然后通过调用自己的构造器,完成对对象的初始化
this(num,name,1000);
}
public Employee(String num, String name, double salary) {
this.num = num;
this.name = name;
this.salary = salary;
}
}
三. super的常用方式
1. super一般可以分为隐式和显示调用父类的相关成员变量,比如,Cooker继承Employee的类
public class Employee{
//定义父类的无参构造器
public Employee(){
System.out.println("父类的无参构造器");
}
}
public Class Cooker{
//定义子类无参构造器
public Cooker(){
//super() 默认为隐藏并且永远在第一行,不然会编译错误。当然也可以显示的写出来
System.out.println("子类无参构造器");
}
}
public class Main{
public static void main(String[] args) {
/*
此时先输出父类无参构造器,再输出子类无参构造器。因为子类无参构造器中含有一个隐式的
super()方法,会调用父类的无参构造器,然后在输出子类的无参构造器。简单理解:先有父亲才会有
儿子
*/
Cooker c = new Cooker();
}
}
2. super调用成员变量都为父类的成员变量,而所有的值都优先去找父类,如果没有则向上找,如果没有,则编译错误。
3. super()调用构造器与this大致相同,子类可以通过super()让父类来创建对象。当然,想调用父类的有参构造器,super
不能显示的调用。