this和super理解
this是表示对象本身的引用,super是表示父类对象引用。
当成员变量和局部变量重名时,就必须使用this关键字类区分成员变量和局部变量。当父类和子类具有相同名称的成员时,就必须使用super关键字来区分。
super关键字也有super()的形式,它表示调用父类构造函数,我们不使用super()时,系统会给出默认的一段代码来调用父类的无参数构造函数。下为super()调用父类构造函数的代码。
class Person{
String //人的姓名
int age //人的年龄
Person(){ //定义父类无参数构造函数
System.out.println("调用父类无参数构造函数");
}
`Person(String name,int age){ //定义父类有参数构造函数``
System.out.println("调用父类有参数构造函数");
}
}
class Student extends Person{
double grade; //学生的成绩
Student(){ //定义子类无参数构造函数
System.out.println("调用子类无参数构造函数");
}
Student(String name,int age, double grads) { //定义子类无参数构造函数
super(name,age); //调用父类无参数构造函数
System.out.println("调用子类无参数构造函数");
}
}
public class ExtendsTest4{
public static void main(String[]agrs){
Student s1=new Student();
Student s2=new Student("Tom",21,89.5);
}
}
上述代码的运行结果为:
调用父类无参数构造函数
调用子类无参数构造函数
调用父类无参数构造函数
调用子类无参数构造函数
一个构造器中最多有一句super()代码。