初学java,经常会被两个关键字this和super混淆,今天我们就在这里简单区别一下:
this表示当前对象,也就是当前类对象,
super表示当前类的父类。
比如你定义一个新的类:A,这个A继承了类B,也就是说B是A的父类。那么如果A中 有个方法:aa();B中也有个方法: aa();
那么在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa();
比如两个类,Son类继承Father类
一.super的使用:
Father类:
package demo11;
public class Father {
public Father(String name) {
System.out.println("调用父类构造方法: " + name);
}
public void write() {
System.out.println("父类的write方法:" + "Fathers");
}
}
Son类:
package demo11;
public class Son extends Father {
public Son(String name) {
super(name);
}
public void write() {
System.out.println("子类的write方法:" + "sons");
super.write();
}
public static void main(String[] args) {
Son s = new Son("xiaoming");
s.write();
}
}
控制台输出为:
调用父类构造方法: xiaoming
子类的write方法:sons
父类的write方法:Fathers
由此我们看出,super()调用的是父类的构造方法,当子类继承父类时,通常情况默认调用父类无参构造函数,如果父类没有无参构造函数,那么子类就必须调用super(参数),否则子类编译会报错,同时在子类son方法write()中调用super.write();那么执行s.write();就会调用父类的write()方法,输出:
<span style="font-size:14px;">子类的write方法:sons
父类的write方法:Fathers</span>
二.this的使用:
Father类:
package demo11;
public class Father {
private String name;// 成员变量
public Father(String name) {
this.name = name; // 当成员变量与局部变量名字一样时,用this.来区别
System.out.println("调用父类构造方法: " + name);
}
public void write() {
System.out.println("父类的write方法:" + "Fathers");
}
}
Son类:
package demo11;
public class Son extends Father {
public Son(String name) {
super(name);
}
public Son() {
this("xiaohong");
}
public void write() {
System.out.println("子类的write方法:" + "sons");
super.write();
}
public static void main(String[] args) {
Son s = new Son("xiaoming");
Son s1 = new Son();
s.write();
}
}
控制台输出:
调用父类构造方法: xiaoming
调用父类构造方法: xiaohong
子类的write方法:sons
父类的write方法:Fathers
由此我们看出:this是指当前对象自己,当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用,如上代码在son子类中使用this(参数)就可以调用其他构造方法,同样也可以实例化。
综上:this是当前对象的引用,super是当前对象的父类对象的引用。