先记下最深刻的:
1. oc喜欢用组合来组织类与类之间的关系(比如category)
java却喜欢用面向对象,继承的方式来衍生出更多的类。
假如你想在所有的activity中写上业务特有的track功能,java会定义一个BaseFragment或BaseActivity来做这件事,以后其他多个页面需要做的也会放在Base类里。每当新写一个fragment或activity,都需要先继承base类。这样会导致继承关系复杂,并且最后把很多不同的事全扔到Base里做。Base里的代码变得不可看。
并且,一个新来的同学可能不知道它们的继承关系;一个基于敏捷开发的小demo想要合进来也变得狠困难。
OC有一种天然的组合方法category。如果你想实现上述的功能,只需对controller派生一个UIViewController(Track)。在需要的页面去import它。通过这样的方式可以将不同功能打散到特定的category里。
ios之所以能做到这一点,是它在编译阶段将include的头文件的代码写入了进来,而C系列的语言是动态不定长的,java为了安全、封闭等考虑,不让开发者写完一个类再去修改里面的内容。
java想要做到动态改原生Activity,只能使用一种Hack的方式,即反射。