this和super关键字,其用法非常的相似。super用来代表父类,而this用来代表本类。
this()用于调用本类的构造。
super()用来调用父类的构造,必须出现在构造当中的第一行。
this. 用来调用本类的属性和方法,可以出现在在非static的部分。super.用来调用父类已经父类继承而来的的属性和方法,出现在非static部分。
如果this.出现在构造当中,代表正在构造或者即将构造成功的对象;如果出现在方法当中,代表该方法的调用对象,在不重名的情况下,this可以省略。this()不能用来自己调用自己。
public class Sub extends Super{
public Sub(){ //3
super(3); //4
System.out.println("sub1"); //7
}
public Sub(int a){ //2
this(); //3
System.out.println("sub2"); //8
}
public Sub(int a, String b){ //1
this(a); //2
System.out.println("sub3"); //9
}
public static void main(String[] args){
new Sub(5,"aa"); //1
}
}
public class Super {
private String b;
private int a;
public Super(){
this(10, "superman");
System.out.println("super1");
}
public Super(int a){ //4
this(a,""); //5
System.out.println("super2"); //6
} //6
public Super(int a, String b){ //5
//等同于写了super();由于其父类已经是object,所以没有执行什么动作
System.out.println("super3");//5
this.a = a; //5
this.b = b; //5
}
}