分类与主类有同名方法的前提下调用顺序

【分类与主类有同名方法的前提下调用顺序】转载自 水月Dragon
如果是load方法

  • 1.load方法的调用是在main()函数之前,且不需要主动调用,程序启动时就会去执行load方法
  • 2.主类与分类加载都会调用load方法,并且主类调用永远优先于分类调用
  • 3.如果是多个分类的情况下,分类的调用顺序取决于编译顺序,如果分类先调用则先加载,后调用则后加载
  • 4.整体总结就是load方法的调用规则是,主类(父类)优先于子类调用,子类优先于分类调用(父类>子类>分类)
如果是普通方法
  • 1.普通方法调用时,分类中的同名方法会覆盖主类的方法,进而执行分类中的功能
  • 2.多个分类中出现同名方法时,只会执行一个,最后调用的分类中的方法会覆盖之前所有的同名方法
  • 3.分类中的方法名和主类方法名一样会报警告,大概就是说分类中实现的方法主类已经实现了
  • 4.可以把声明写在主类, 实现写在分类,这样也能调用到分类里面的代码
  • 5.同样可以把声明和实现写在不同的分类文件中,还是能找到的, 不过主类要相同
  • 6.普通方法的优先级: 分类> 子类 > 父类, 优先级高的同名方法覆盖优先级低的
initialize
  • 当第一次用到类的时候, 如果重写了+ initialize方法,会去调用
  • 当调用子类的+ initialize方法时候, 先调用父类的,如果父类有分类, 那么分类的+ initialize会覆盖掉父类的, 和普通方法差不多
  • 父类的+ initialize不一定会调用, 因为有可能父类的分类重写了它

    推荐阅读