super和super()
super代指父类,而super()代指父类无参构造函数。具体用法如下:
用super在子类中得到父类的成员变量
//父类代码
public class Fu {
int age =50;
}
//子类代码
public class Zi extends Fu{
int age = 22;
public void show() {
int age = 0;
System.out.println(age);
System.out.println(this.age);
System.out.println(super.age);
}
}
//测试类代码
public class Demo {
public static void main(String[] args) {
Zi zi1 = new Zi();
zi1.show();
}
}
输出结果如下:
结论
1、子类中的输出的age采取就近原则:局部变量>成员变量>父类成员变量
2、this指代本类,super指代父类
接下来说说输出的第一行“父类无参”是咋回事
用super()在子类中得到父类的构造函数
始终记得没有构造方法默认无参,自定义构造方法就没有默认的无参了(值得细品)
//父类代码
public class Fu {
int age =50;
public Fu() {
System.out.println("父类无参");
}
public Fu(int age) {
System.out.println("父类有参");
}
}
//子类代码
public class Zi extends Fu{
int age = 22;
public Zi() {
super(12);
System.out.println("子类无参");
}
public Zi(int age) {
super();//默认调用父类无参构造函数,可不写!!(不写的前提:父类 至少有 无参构造函数)
System.out.println("子类有参");
}
}
//测试类代码
public class Demo {
public static void main(String[] args) {
Zi zi1 = new Zi();
Zi zi2 = new Zi(20);
}
}
输出结果如下:
结论
1、父类至少有 无参构造函数时子类构造函数自动调用其父类无参构造函数( super() )。
2、若要调用父类有参构造函数需明写super(……)。