介绍: this:当前对象
super:直接父类对象
this():当前类的无参构造方法,也可以指定有参的如:this(a)
super():直接父类的无参构造方法,也可以指定有参的如:super(a)
注意:1,当在方法内调用一个变量b,编译器会向上遍历,直到找到最近的一个引用变量为止:b—>this.b—>super.b,如果未找到,编译器将显式提 示错误信息;
2,当变量b的定义只发生在父类时,此时 b=this.b=super.b;
3,当局部变量b覆盖成员变量b时,使用this.b调用成员变量,此时的成员变量包括子类新增和继承的变量,不包含隐藏变量;
4,当子类成员变量b覆盖父类成员变量b时,使用super.b调用这个被隐藏的成员变量;
5,当子类重写了父类方法method(),可以使用super.method()来调用父类被隐藏的方法;
6,super()与this()具备硬性使用条件,否则编译无法通过——Constructor call must be the first statement in a constructor.即
二者出现的位置必须是构造方法的第一行;
7,super()与this()并不像super.b与this.b一样可以向下替代,因为子类并不能继承父类的构造方法,仅仅是包含了父类的有参或无参构造器 (默认无参);
8,Implicit[不言明的,隐式的] super constructor Subject() is undefined. Must explicitly[明确地] invoke another constructor,这句话表明:
子类的构造方法中必须调用父类的构造方法,如果没有显式写出super(),则默认调用父类的无参构造方法。但此时如果父类写了有参的构 造方法,编译器就不会再为父类默认创建无参构造方法,此时super()没有被定义,则必须在子类的构造方法中写明super(参数)或者在父类 中显式写出父类的无参构造方法;
实例:
父类
子类
运行结果