Java关键字super

本文摘要:Java关键字super@[toc]基本理解在Java类中使用super来调用父类中的指定操作super可用于访问父类中定义的属性super可用于调用父类中定义的成员方法super可用于在子类构造器中调用父类的构造器注意尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员super的......

Java关键字super

@[toc]


基本理解
  • 在Java类中使用super来调用父类中的指定操作
  1. super可用于访问父类中定义的属性
  2. super可用于调用父类中定义的成员方法
  3. super可用于在子类构造器中调用父类的构造器
  • 注意
  1. 尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员
  2. super的追溯不仅限于直接父类
  3. super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
super的使用

可以在子类的方法或构造器中,通过使用”super.属性“或者”super.方法“的方式。显示的调用父类中声明的属性或方法,但是,通常情况下我们都习惯省略“super.”


特殊情况:(属性)

  • 当子类和父类中定义了同名的属性时,我们要想在子类中调用父类的属性,则必须显式的使用”super.属性“的方式表面调用的是父类中声明的属性(但是通常开发中不会出现这种情况)

例如:

父类定义了属性id,但是子类又定义了id,如代码所示(代码是Person的子类,父类中定义了一个id)

package superGJZ;

public class Student extends Person {
    String major;
    int id=100;//学号
    public Student(){
    }
    public Student(String major){
        this.major=major;
    }
    public void eat() {
        System.out.println("Student类对Person类eat方法的重写");
    }
    public void study(){
        System.out.println("Student类自己的study方法");
    }
    //super
    public void show(){
        System.out.println("name="+name+",age="+age);
        System.out.println("id="+id+"id="+super.id);//第一个id其实是this.id,this被省略了的
    }
}
  • 特殊情况(方法)

当子类重写了父类的方法以后,想要在子类的方法中调用父类被重写的方法时,必须显式的使用”super.方法“的方式表面调用的是父类的方法

调用父类的构造器
  1. 可以在子类的构造器中显式的使用”super(形参列表)“的方式,调用父类中声明的构造器
  2. ”super(形参列表)“的使用,必须声明在子类构造器的首行
  3. 我们在类的构造器中,针对”this(形参列表)“或”super(形参列表)“只能二选一不能同时出现
  4. 当我们在构造器的首行,既没有显式的声明”this(形参列表)“或”super(形参列表)“,则默认的调用的是父类中空参的构造器,相当于默认的有“super();”
  5. 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错

this和super的区别

标签