this与super

      对象实例化时,至少有一条从本类出发抵达Object的通路,而打通这条路的两个主要工兵就是this和super,逢山开路,遇水搭桥。但是this和super往往是默认无闻的,在很多情况下可以省略,比如:
 ·  本类方法调用本类属性
 ·  本类方法调用另一个本类属性
 ·  子类构造方法隐含调用super()。
     任何类在创建之处,都有一个默认的空构造方法,它是super的一条默认通路。构造方法的参数列表决定了调用通路的选择;如果子类指定调用父类的某个构造方法,super就会不断往上朔源;如果没有指定,则默认调用super()。如果父类没有提供默认的构造方法,子类在继承时就会编译错误。

     如果父类坚持不提供默认的无参构造方法,必须在本类的无参构造方法中使用super方法调用父类的有参构造方法,如public Son(){super(123)}; 一个实例变量可以通过this.赋值另一个实例变量;一个实例方法可以通过this.调用另一个实例方法;甚至一个构造方法都可以通过this.调用另一个构造方法。如果this和super指代构造方法,则必须位于方法体中的第一行。换句话说,在一个构造方法中,this和super只能出现一个,且只能出现一次,否则在实例化对象时,会因子类调用到多个父类构造方法而造成混乱。

     由于this和super都在实例化阶段调用,所以不能在静态方法和静态代码块中使用this和super关键字。this还可以指代当前对象,比如在同步代码块synchronized(this){...}中,super并不具备此能力。但super也有自己的特异功能,在子类覆写父类方法时,可以使用super调用父类同名的实例方法。最后总结一下this和super的异同点,如图2-5所示

 

posted @ 2023-04-15 23:00  雨晨漫步  阅读(23)  评论(0编辑  收藏  举报