唉。。建议参考源代码。其实super也没有那么神秘啦,这是由他们内部的实现所决定的。
你看了源代码就清楚原因了。。

解决方案 »

  1.   


    那请问最后super.XXX()放在最后的作用是什么啊?
    谢谢...
      

  2.   

    你用的这个super.onSizeChanged的作用在后面和你说好了。首先,如果super.xxx放在最前面,很可能是因为基类里面做了很多初始化的事情,如果这些事情不先做掉,你后面的调用会出现问题,所以必须放在前面。当然,还可能会有其他原因,这个要从全局来看。而super.xxx放在后面,原因比较多:
    1. 只是希望在super.xxx被调用时,做一些其他事情。这时候就会把想做的事情,例如log或者什么的,放在super.xxx的前面,因为如果放在后面的话,可能时机就错掉了(当然,有些时候就需要放在后面,也是log的情况。。这个顺序全看需求了。)
    2. 需要提前修改super.xxx所需的一些参数。这时候就要在前面做掉。
    3. super.xxx可能会修改某些参数,所以要在super.xxx被调用之前先把这些参数用掉。
    放前放后,原因是多种多样的,其实我说这个要看源代码的原因就在于这里了。
    一般平时写代码的时候,也会遇到是先调用基类的xxx方法还是后调用的问题,这里是一样的原因嘛。
      

  3.   

    你这边的super.onSizeChanged,看起来像第一种。就是为了记录一些值。
    其实这里就是一个函数调用的顺序问题,应该完全采用“过程式”思考,可能会更清晰一点。
    原则就是保持你的变量,在被使用的位置,是应该正确的值,就可以了。
      

  4.   

    哦,明白了,保护变量。
    就我贴出来的代码的话,我感觉这个super.onSizeChanged()可有可无,因为super.onSizeChanged()中的参数都是基本类型,super.XXXX()里面再折腾出了super.XXXX()方法后也不可能改变这些值。对于这样的可有可无的super.XXX()方法,什么时候该写什么时候不该写,有什么建议吗?
    谢谢 ch1oE
      

  5.   


    呵呵,谢谢你了。
    按你的提示,我下了源代码后看了本super.XXXX()方法是空函数,我想确实是可有可无的。