Java中super关键字的位置
1.子类的构造函数如果要引用super的话,必须把super放在函数的首行。
例如:
class Base {
Base() {
System.out.println("Base");
}
}
public class Checket extends Base {
Checket() {
//调用父类的构造方法,一定要放在方法的首个语句
super();
System.out.println("Checket");
}
public static void main(String argv[]) {
Checket c = new Checket();
}
}
同时,当父类构造函数有参数时,可以调用super(value),同样地,也需要将其放置在构造函数第一行。super()在第一行的原因就是:子类有可能访问了父类对象, 比如在构造函数中使用父类对象的成员函数和变量, 在成员初始化使用了父类, 在代码块中使用了父类等, 所以为保证在子类可以访问父类对象之前要完成对父类对象的初始化。
2.若super只是在普通方法中使用时,不需要放置在第一行,表示使用父类的成员方法。
如:
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Hefei";
//不调用此方法时,super.name 返回的是父类的成员变量的值 null
super.value();
System.out.println(name);
System.out.println(super.name);
}
public static void main(String[] args) {
City c=new City();
c.value();
}
}