this是指本类的当前对象,而super是指本类的父类的当前对象;使用this调用本类的属性和方法,而使用super调用父类的属性和方法。
当本类中没有覆盖父类的属性或者方法时,可以不使用super关键字就可以调用父类的属性或者方法;需要注意的是子类调用构造函数的时候,需要先调用父类的构造函数,然后在调用本类的构造方法(因此需要在本类的构造函数里面的第一行写上super(),这个方法里面的参数可以有也可以没有,根据需要而定)。
下面附个小程序:
class People{
private String name;
private int age;
public People(){
System.out.println("先调用父类无参数构造方法");
}
public People(String n){
System.out.println("先调用父类构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//set人的属性
public void setInfor(String name,int age){
this.setName(name);
this.setAge(age);
}
//get人的属性
public void getInfor(){
System.out.print("姓名:"+this.getName()+" 年龄:"+this.getAge());
}
}
class Student extends People{
private String school;
public Student(){
super("a");
System.out.println("后调用学生构造方法");
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
//set学生的属性
public void setInfor(String name,int age,String school){
super.setInfor(name, age);
this.setSchool(school);
}
//get学生的属性
public void getInfor(){
super.getInfor();
System.out.println(" 学校:"+school);
}
}
public class Extends {
public static void main(String [] args){
Student student = new Student();
student.setInfor("王倩",23,"河北理工");
student.getInfor();
}
}
需要特别注意的是:子类调用构造函数的时候,需要先调用父类构造函数,因此要把super()写在构造函数里面的第一行;子类的setInfor方法和getInfor方法都调用了父类的相对应的方法。
下面看看运行结果: