// super 关键字表示父类的意思
// this 变量代表对象本身
// 当类中有两个同名变量,一个为类的成员变量,一个属于某个特定方法,使用this可以区分开成员变量和局部变量
// 可以使用super 访问父类被子类隐藏的变量或覆盖的方法 super.XX();
// 使用this 表示当前调用方法的对象的引用
// 希望在方法的内部获得当前对象的引用,可以使用关键字this,this 关键字只能在方法内部使用 表示"调用方法的那个对象的引用"
// <[Constructor call must be the first statement in a constructor]>
class Person {
public static void prt(String s) {
System.out.println(s);
}
// 父类无参数构造方法
Person() {
prt("A Person.");
}
Person(String name) {
prt("A person name is:" + name);
}
}
// [如果]调用super() 必须写在子类构造方法的第一行 否则编译不通过 每个子类构造方法的第一条语句都会隐含调用super()
// 如果父类没有这种形式的构造函数,那么编译就会出错
// super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法
// super()和this()均需放在构造方法内第一行[要么不用 要么放在第一行]
// this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,
// 其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通
// this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
public class Chinese extends Person {
Chinese() {
super(); // 调用父类构造方法(1)
prt("子类·调用父类”无参数构造方法“: "+"A chinese coder.");
}
Chinese(String name) {
super(name);// 调用父类具有相同形参的构造方法(2)
// this(); // Constructor call must be the first statement in a constructor
prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name);
}
Chinese(String name, int age) {
this(name);// 调用具有相同形参的构造方法(3)
prt("子类:调用子类具有相同形参的构造方法:his age is " + age);
}
public static void main(String[] args) {
// this(); Constructor call must be the first statement in a constructor
Chinese cn = new Chinese(); // new 一个对象的时候 会调用相应的构造方法
cn = new Chinese("rufus"); // new 一个对象的时候 会调用相应的构造方法
cn = new Chinese("cathy", 18); // new 一个对象的时候 会调用相应的构造方法
}
}