1、this和super一样,都是对象内部的引用变量,只能出现在对象内部;
2、this指向当前对象自己,super指向当前对象的父类型特征,故this的东西比super多,也就是super是this的一部分;
3、this()和super()都只能出现在构造方法的第一行,故this()和super()方法不能共存,当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法;
4、this()是构造方法中调用本类其他的构造方法,super()是当前对象构造方法中去调用自己父类的构造方法。
public class MyTest {
public static void main(String[] args) {
new Cat();
}
}
//父类,Animal类
class Animal {
//构造函数
public Animal() {
super();
System.out.println("1:Animal类的无参数构造函数执行");
}
public Animal(int i) {
super();
System.out.println("2:Animal类的有int参数构造函数执行");
}
}
//子类,Cat类
class Cat extends Animal{
//构造函数
public Cat() {
this("");
System.out.println("3:Cat类的无参数构造函数执行");
}
public Cat(String str) {
super(1);
System.out.println("4:Cat类的有String参数构造函数执行");
}
}
执行结果:
2:Animal类的有int参数构造函数执行
4:Cat类的有String参数构造函数执行
3:Cat类的无参数构造函数执行
如果修改一下子类super()的参数:
public class MyTest {
public static void main(String[] args) {
new Cat();
}
}
//父类,Animal类
class Animal {
//构造函数
public Animal() {
super();
System.out.println("1:Animal类的无参数构造函数执行");
}
public Animal(int i) {
super();
System.out.println("2:Animal类的有int参数构造函数执行");
}
}
//子类,Cat类
class Cat extends Animal{
//构造函数
public Cat() {
this("");
System.out.println("3:Cat类的无参数构造函数执行");
}
public Cat(String str) {
super();
System.out.println("4:Cat类的有String参数构造函数执行");
}
}
执行结果就是这样:
1:Animal类的无参数构造函数执行
4:Cat类的有String参数构造函数执行
3:Cat类的无参数构造函数执行
通过上面的代码应该能理解到super()方法的作用了吧!