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方法都调用了父类的相对应的方法。

下面看看运行结果: