关键字super指代父类。
用途:1)调用父类的构造方法
2)调用父类的方法
语法:super()、super(parameters)
构造方法用于构造一个类的实例。子类继承父类时,父类的构造法方法不会被子类继承。所以需要用到父类的构造方法或方法时,super就派上用场啦。
super()、super(paraments)必须出现在子类构造方法的第一行,是显示调用父类构造方法的唯一方式。
构造方法链
构造方法可以调用重载的构造方法或父类的构造方法。
如果都没有被显示地调用,编译器会自动地将super()作为构造方法的第一条语句。
public class Person { public Person() { System.out.println("first"); } } public class Employee extends Person{ public Employee() { this("second");//this调用本类的有参构造方法 System.out.println("third"); } public Employee(String s) { System.out.println(s); } } public class Faculty extends Employee { public static void main(String[] args) { new Faculty(); } public Faculty() { System.out.println("fourth");//super()没有显式调用的话,自动调用父类无参构造方法,所以每个类最好都写下无参构造方法 } }
运行结果:
在调用Faculty的无参构造方法前,因为Faculty是Employee的子类,所以先调用父类无参构造方法,由于Person是Employee的父类,所以先调用父类的的无参构造方法。
在设计一个可以被继承的类时,最好为每一个类提供一个无参构造方法,以便于对该类进行扩展,同时避免错误。
调用父类的方法
super.方法名(参数);
如果仅仅是调用父类的方法,是不需要使用super的,子类直接继承父类的方法,可以直接调用。
在方法重写中就需要用到关键字super!
方法重写
什么是方法重写:子类修改父类的方法。
public class Person { public Person() { System.out.println("first"); } } public class Employee extends Person{ public Employee() { this("second"); System.out.println("third"); } public Employee(String s) { System.out.println(s); } public String Change() { return "This is Person"; } } public class Faculty extends Employee { public static void main(String[] args) { Faculty user=new Faculty(); System.out.println(user.Change()); } public Faculty() { System.out.println("fourth"); } public String Change() { //重写了父类的方法 return super.Change()+" This is Employee"; } }
运行结果: