一:java继承里面的super关键字
- 一个引用变量,用于引用父类对象
- 父类和子类都具有相同的命名方法,要调用父类方法时使用
- 父类和子类都具有相同的命名属性,要调用父类中的属性时使用
- super也是父类的构造函数,格式 super(参数)
- 注意:调用super() 必须是类构造函数中的第一条语句,否则编译不通过
- 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错
- this()和super()都指的是对象,均不可以在static环境中使用
二:构造函数里面的 super和this
- this()和super()都指的是对象,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
- this 和super在构造函数中只能有一个,且都必须是构造函数当中的第一行
- 当父类的构造函数是无参构造函数时,在子类的构造函数中,不用显式super()去调用父类的构造函数,
- 当父类的构造函数是有参构造函数时,如果子类的构造函数中不写super()进行调用父类的构造函数,编译器会报错
三:java继承后类的初始化顺序
静态代码块、非静态代码、父类/子类无参构造方法、父类/子类的一般方法
Father.java
package chapter6;
public class Father {
static {
System.out.println("父类静态代码块");
}
private int age;
public Father(){
System.out.println("father 无参构造函数");
}
public Father(int age){
this.age = age;
System.out.println("father 有参构造函数");
}
public void sleep(){
System.out.println("father sleep");
}
}
Child.java
package chapter6;
public class Child extends Father {
static {
System.out.println("子类静态代码块");
}
private int age;
public Child() {
System.out.println("child constructor");
}
public Child(int age) {
super();
}
public void sleep() {
System.out.println("child sleep");
}
}
ExtendDemo.java
package chapter6;
public class ExtendDemo {
public static void main(String[] args) {
Child child = new Child();
child.sleep();
}
}
//运行结果
// 父类静态代码块
// 子类静态代码块
// father 无参构造函数
// child constructor
// child sleep