类在继承时会用到this和super,这里就做了一点总结,与大家共同交流~
this
1.普通的直接引用 this表示类的当前对象 形参与成员名字重名,用this来区分 class Person { private int age = 10; public Person(){ System.out.println("初始化年龄:"+age); } public int GetAge(int age){ this.age = age; return this.age; } } public class test1 { public static void main(String[] args) { Person Frank = new Person(); System.out.println("Frank's age is "+Frank.GetAge(18)); } } 运行结果: 初始化年龄:10 Frank's age is 18 这里age是GetAge成员方法的形参,this.age是Person类的成员变量。 2.引用构造函数 调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) this() this(参数)
super
1.普通的直接引用 super相当于是指向类当前对象父类的指针 子类中的成员变量或方法与父类中的成员变量或方法同名时,可以用super.xxx来引用父类的成员 class Country { String name; void value() { this.name = "China"; } } class City extends Country { String name; void value() { this.name = "Shanghai"; super.value(); //调用父类的方法value() System.out.println(name); System.out.println(super.name); //调用父类的变量name } public static void main(String[] args) { City c = new City(); c.value(); } } 运行结果: Shanghai China 这里既调用了父类的方法,也调用了父类的变量 2.引用构造函数 调用直接父类中的某一个构造函数(应该为构造函数中的第一条语句) super() super(参数) class Person { public static void cout(String s) { //输出语句封装 System.out.println(s); } Person() { cout("父类•无参数构造方法: "+"A Person."); // 构造方法(1) } Person(String name) { cout("父类•含一个参数的构造方法: "+"A person's name is " + name); // 构造方法(2) } } public class Chinese extends Person { Chinese() { super(); // 调用父类构造方法(1) cout("子类•调用父类”无参数构造方法“: "+"A chinese coder."); } Chinese(String name) { super(name); // 调用父类具有相同形参的构造方法(2) cout("子类•调用父类”含一个参数的构造方法“: "+"his name is " + name); } Chinese(String name, int age) { this(name); // 调用该类具有相同形参的构造方法Chinese(String name) cout("子类:调用子类具有相同形参的构造方法:his age is " + age); } public static void main(String[] args) { Chinese cn = new Chinese(); cn = new Chinese("xingxing"); cn = new Chinese("xingxing", 18); } } 运行结果: 父类•无参数构造方法: A Person. 子类•调用父类”无参数构造方法“: A chinese coder. 父类•含一个参数的构造方法: A person's name is xingxing 子类•调用父类”含一个参数的构造方法“: his name is xingxing 父类•含一个参数的构造方法: A person's name is xingxing 子类•调用父类”含一个参数的构造方法“: his name is xingxing 子类:调用子类具有相同形参的构造方法:his age is 18 本例用super和this分别调用父类的构造方法和本类中其他形式的构造方法 例子中Chinese类第三种构造方法调用的是本类中第二种构造方法,而第二种构造方法是调用父类的super和this的异同
•this:它代表类当前对象(如果函数的形参与类中的成员数据同名,这时用this来指明成员变量名)。 •super:它引用类当前对象的直接父类中的成员(用来访问直接父类中成员数据或函数,如:super.变量名,super.成员函数名(实参))。 •this(),this(参数):调用本类中另一种形式的构造方法,都是只能使用于构造方法中(需放在构造方法内第一行)。 •super(),super(参数):调用基类中的某一个构造方法,都是只能使用于构造方法中(需放在构造方法内第一行)。 •this()与super()不能共存同一构造方法,一个构造方法中只能使用一个。 •super()可以不写,在不写的时候会默认调用父类的无参构造,每个子类构造方法的第一条语句,都是隐含地调用super()。 •this()和super()均不可以在static环境中使用,包括static变量,static方法,static语句块。 •从本质上讲,this是一个指向类当前对象的指针, super相当于是指向类当前对象直接父类的指针。
