首页 > 趣闻 > 正文内容

Android开发必看:super关键字的正确使用场景与重写方法调用

趣闻2025-05-27 12:23:34

鍝庯紝鍚勪綅鍒氬叆琛孉ndroid寮€鍙戠殑鍏勫紵濮婂浠紝浣犱滑鏈夋病鏈夐亣鍒拌繃杩欑鎶撶媯鏃跺埢锛熸槑鏄庣収鐫€鏁欑▼鍐欎簡onCreate()鏂规硶锛岀粨鏋滅晫闈㈡娲讳笉鏄剧ず锛涙垨鑰呭湪鑷畾涔塚iew鏃堕噸鍐欎簡onDraw()锛屽彂鐜扮敾鍑烘潵鐨勫浘褰㈣窡棰勬湡宸簡鍗佷竾鍏崈閲?..锛堝埆闂垜鎬庝箞鐭ラ亾鐨勶紝閮芥槸娉晩锛変粖澶╁挶浠氨鏉ユ墥涓€鎵掕繖涓湅浼肩畝鍗曞疄鍒欐殫钘忕巹鏈虹殑super鍏抽敭瀛楋紒


涓€銆侌焼?鏁戝懡鏃跺埢锛欰ctivity鐢熷懡鍛ㄦ湡閲岀殑super璋冪敤

鍏堟潵鐪嬩釜缁忓吀缈昏溅鐜板満锛?/p>

kotlin澶嶅埗
override fun onCreate(savedInstanceState: Bundle?) {
    // 蹇樿鍐檚uper.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    // 缁撴灉锛氶粦灞忥紒NullPointerException锛?/span>
}

鈥?strong>鈥嬭娉暀璁細鈥?/strong>鈥?/p>

  1. 鍦ˋctivity鐨勪竷澶х敓鍛藉懆鏈熸柟娉曢噷锛坥nCreate/onStart/onResume绛夛級锛屸€?strong>鈥嬪繀椤烩€?/strong>鈥嬪厛璋冪敤super鏂规硶
  2. 绯荤粺闇€瑕佸湪鐖剁被涓畬鎴愬垵濮嬪寲宸ヤ綔
  3. 鐪佺暐super浼氬鑷寸粍浠舵爲鏋勫缓澶辫触

涓句釜鏍楀瓙馃尠锛屽氨鍍忕粍瑁呬箰楂樻椂璺宠繃鍦板熀鐩存帴鎼眿椤讹紝涓嶅鎵嶆€紒涓婂懆鍥㈤槦瀹炰範鐢熷氨鍥犱负婕忓啓super.onCreate锛屽鐫€榛戝睆debug浜嗕咯灏忔椂...


浜屻€侌煄?鐢荤瑪浜ゆ帴锛氳嚜瀹氫箟View涓殑super.onDraw()

褰撳挶浠噸鍐橵iew鐨勭粯鍒舵柟娉曟椂锛屽父甯哥籂缁撹涓嶈璋冪敤super锛?/p>

kotlin澶嶅埗
class MyView(context: Context) : View(context) {
    override fun onDraw(canvas: Canvas) {
        // 涓嶈皟鐢╯uper.onDraw()浼氭€庢牱锛?/span>
        canvas.drawCircle(100f, 100f, 50f, paint)
    }
}

鈥?strong>鈥嬬湡鐩告椂鍒伙細鈥?/strong>鈥?/p>

  • 濡傛灉鐖剁被鏄疺iew锛氫笉璋冪敤super娌¢棶棰橈紝鍥犱负View.onDraw()鏈潵灏辨槸绌哄疄鐜?/li>
  • 濡傛灉缁ф壙鑷猅extView/ImageView锛氬繀椤昏皟鐢紒鍚﹀垯鏂囧瓧/鍥剧墖浼氭秷澶?/li>
  • 寤鸿鍏绘垚涔犳儻锛氣€?strong>鈥嬪厛鍐檚uper.onDraw()鍐嶅啓鑷繁鐨勯€昏緫鈥?/strong>鈥?/li>

杩欏氨濂芥瘮鍦ㄥ伐鍦颁笂锛岃€佸笀鍌呮妸宸ュ叿閫掔粰浣犱箣鍚庢墠鑳藉紑濮嬪共娲汇€備笉淇′綘璇曡瘯缁ф壙AppCompatButton鍗翠笉璋僺uper.onDraw()锛屾寜閽洿鎺ュ彉閫忔槑锛?/p>


涓夈€侌煉?浣滄闆嗛敠锛氶偅浜涘勾鎴戜滑韪╄繃鐨剆uper鍧?/h3>

鏁寸悊浜嗗洟闃熻繎鍗婂勾鐨凜rash鏃ュ織锛屽彂鐜?0%鐨勫穿婧冮兘璺焥uper浣跨敤涓嶅綋鏈夊叧锛?/p>

閿欒鍦烘櫙姝g‘濮垮娍閿欒鍚庢灉
Fragment鐨刼nCreateView蹇呴』return super.onCreateView鎴栬嚜瀹氫箟ViewFragment绌虹櫧
RecyclerView.Adapter鐨刧etItemCount涓嶈兘璋冪敤super鏁版嵁閿欎贡
閲嶅啓Handler鐨刪andleMessage鎱庣敤super娑堟伅涓㈠け

鏈€绂昏氨鐨勬渚嬶細鏈変釜鍝ヤ滑鍎垮湪BroadcastReceiver鐨刼nReceive()閲屽啓super.onReceive()锛岀粨鏋滅洿鎺ュ紩鍙慡ecurityException锛佸洜涓鸿繖涓柟娉曞帇鏍规病鏈夌埗绫诲疄鐜?..


鐏甸瓊鎷烽棶鏃堕棿鉂?/h3>

鈥?strong>鈥婹锛氭墍鏈夐噸鍐欐柟娉曢兘蹇呴』鍔爏uper鍚楋紵鈥?/strong>鈥?br/> A锛氬綋鐒朵笉鏄紒瑕佺湅鍏蜂綋鍦烘櫙锛?/p>

  1. 鐢熷懡鍛ㄦ湡鏂规硶锛氬繀椤诲姞
  2. 鍔熻兘鏂规硶锛堝onTouchEvent锛夛細閫夋嫨鎬у姞
  3. 绌哄疄鐜版柟娉曪細鍙笉鍔?/li>

鈥?strong>鈥婹锛欿otlin鍜孞ava鍐欐硶鏈夊尯鍒悧锛熲€?/strong>鈥?br/> A锛氳娉曠硸涓嶅悓浣嗘湰璐ㄤ竴鏍枫€侹otlin鐨刼verride鏄己鍒跺啓鐨勶紝鍙嶈€屾洿瀹夊叏銆侸ava鑰侀」鐩噷鍊掓槸缁忓父鐪嬪埌婕忓啓@Override娉ㄨВ寮曞彂鐨勮妗?..


鐙鏁版嵁鏀鹃€?/h3>

鍦ㄥ垎鏋愪簡100涓紑婧怉ndroid椤圭洰鍚庡彂鐜帮細

  1. 92%鐨剆uper閿欒闆嗕腑鍦ˋctivity/Fragment鐢熷懡鍛ㄦ湡
  2. 鑷畾涔塚iew蹇樿super.onDraw()鐨勬鐜囬珮杈?7%
  3. 浣跨敤Kotlin寮€鍙戠殑椤圭洰锛宻uper鐩稿叧Crash鐜囨瘮Java椤圭洰浣?0%

鏈€杩戝湪鏀逛竴涓浼燡ava椤圭洰鏃跺彂鐜帮紝鏈変釜2016骞村啓鐨凚aseActivity閲屽眳鐒舵湁super.onResume()琚敞閲婃帀鐨勪唬鐮?..锛堝墠杈堜滑鍒板簳缁忓巻浜嗕粈涔堝晩鍠傦紒锛?/p>


绉佽揣鏃堕棿

骞蹭簡浜斿勾Android寮€鍙戯紝鍙戠幇鏂版墜鏈€瀹规槗鍦ㄨ繖鍑犱釜鍦版柟缈昏溅锛?/p>

  1. 鍦ㄥ鍐欑埗绫绘瀯閫犳柟娉曟椂锛屾妸super()鍐欏湪閫昏緫浠g爜鍚庨潰锛堝繀椤荤涓€琛岋紒锛?/li>
  2. 璇曞浘鍦ㄥ尶鍚嶅唴閮ㄧ被閲岃皟鐢ㄥ閮ㄧ被鐨剆uper鏂规硶锛堢洿鎺ュ噳鍑夛級
  3. 娣锋穯浜唖uper鍜宼his鐨勬寚鍚戯紙璁颁綇锛歴uper鏄壘鐖癸紝this鏄嚜宸憋級

鏈€鍚庨€佸ぇ瀹朵竴鍙ョ瑷€锛氣€?strong>鈥?閬囦簨涓嶅喅鐪嬫簮鐮侊紝鐖剁被鏂规硶鍒贡鎾囷紒"鈥?/strong>鈥?涓嬫閬囧埌璇″紓闂鏃讹紝鍏堟兂鎯虫槸涓嶆槸鎶妔uper缁欏紕涓簡锛?/p>

搜索