先記下最深刻的:
1. oc喜歡用組合來組織類與類之間的關系(比如category)
? ? java卻喜歡用面向對象圣贸,繼承的方式來衍生出更多的類恃疯。
假如你想在所有的activity中寫上業(yè)務特有的track功能,java會定義一個BaseFragment或BaseActivity來做這件事侯嘀,以后其他多個頁面需要做的也會放在Base類里彤灶。每當新寫一個fragment或activity惰许,都需要先繼承base類倔监。這樣會導致繼承關系復雜直砂,并且最后把很多不同的事全扔到Base里做。Base里的代碼變得不可看浩习。
并且静暂,一個新來的同學可能不知道它們的繼承關系;一個基于敏捷開發(fā)的小demo想要合進來也變得狠困難谱秽。
OC有一種天然的組合方法category洽蛀。如果你想實現上述的功能摹迷,只需對controller派生一個UIViewController(Track)。在需要的頁面去import它郊供。通過這樣的方式可以將不同功能打散到特定的category里峡碉。
ios之所以能做到這一點,是它在編譯階段將include的頭文件的代碼寫入了進來颂碘,而C系列的語言是動態(tài)不定長的,java為了安全椅挣、封閉等考慮头岔,不讓開發(fā)者寫完一個類再去修改里面的內容。
java想要做到動態(tài)改原生Activity鼠证,只能使用一種Hack的方式峡竣,即反射。