首页 > 社会 > 正文内容

子类构造必学:Java中调用父类方法的2种场景解析

社会2025-05-28 02:40:37

馃毃鐏甸瓊鏆村嚮锛氫笉璋冪敤鐖剁被鏂规硶浼氭€庢牱锛?/h3>

浣犺瘯杩囧啓瀛愮被鏋勯€犲櫒鏃剁獊鐒舵姤閿欏悧锛熷氨鍍忓仛铔嬬硶蹇樿鏀鹃潰绮夛紝鏁翠釜绋嬪簭鐩存帴宕╃粰浣犵湅锛佽繖浜嬪効鎴戝綋骞村彲娌″皯韪╁潙銆?/p>

涓句釜鐪熷疄妗堜緥锛氫笂鍛ㄦ湁涓鍛樺啓浜嗚繖鏍风殑浠g爜锛?/p>

java澶嶅埗
class 绌鸿皟 {
    绌鸿皟(int 娓╁害) {
        System.out.println("鍒濆娓╁害锛? + 娓╁害);
    }
}

class 鏅鸿兘绌鸿皟 extends 绌鸿皟 {
    鏅鸿兘绌鸿皟() {
        System.out.println("鍚姩AI妯″紡");
    }
}

缁撴灉缂栬瘧鍣ㄧ洿鎺ョ敥鑴稿瓙锛?code>There is no default constructor available in 绌鸿皟銆?/p>

鈥?strong>鈥嬩负浠€涔堬紵鈥?/strong>鈥?br/> 馃憠 Java鏈変釜閾佸緥锛氬瓙绫绘瀯閫犲櫒蹇呴』鈥?strong>鈥嬪厛鈥?/strong>鈥嬭皟鐢ㄧ埗绫绘瀯閫犲櫒锛屽氨鍍忕洊妤煎繀椤诲厛鎵撳湴鍩恒€備笉鍔爏uper()锛岀紪璇戝櫒灏辩粰浣犺嚜鍔ㄥ姞涓猻uper()鈥斺€斾絾瑕佹槸鐖剁被娌℃湁鏃犲弬鏋勯€犲櫒锛岀洿鎺G锛?/p>


馃挕鍦烘櫙涓€锛氭瀯閫犲櫒鍒濆鍖栧繀鏉€鎶€

鈥?strong>鈥嬪吀鍨嬬棁鐘垛€?/strong>鈥嬶細

  • 浠g爜鎶ラ敊鎻愮ず鐖剁被娌℃湁鍚堥€傜殑鏋勯€犲櫒
  • 鏄庢槑鐖剁被鏈夋瀯閫犲櫒鍗存彁绀烘壘涓嶅埌
  • 瀛愮被瀹炰緥鍖栧悗鐖剁被瀛楁娌″垵濮嬪寲

鈥?strong>鈥嬫晳鍛芥柟妗堚€?/strong>鈥嬶細

java澶嶅埗
class 鐢电珵妞?{
    String 鏉愯川;
    
    鐢电珵妞?String 鏉愯川) {
        this.鏉愯川 = 鏉愯川;
    }
}

class 璧涜溅妞?extends 鐢电珵妞?{
    boolean 鏈夊畨鍏ㄥ甫;
    
    璧涜溅妞?) {
        super("纰崇氦缁?);  // 鉁?鍏堢粰鐖剁被鏉愯川璧嬪€?/span>
        鏈夊畨鍏ㄥ甫 = true;  // 鉁?鍐嶅垵濮嬪寲瀛愮被瀛楁
    }
}

鈥?strong>鈥嬪姣旇〃鏍尖€?/strong>鈥嬶細

姝g‘鍐欐硶閿欒鍐欐硶
鈥?strong>鈥嬫墽琛岄『搴忊€?/strong>鈥?/td>鍏坰uper鍚庡瓙绫诲垵濮嬪寲鍏堝瓙绫诲垵濮嬪寲鍚巗uper
鈥?strong>鈥嬬紪璇戠粨鏋溾€?/strong>鈥?/td>閫氳繃鎶ラ敊锛歝all to super must be first
鈥?strong>鈥嬪唴瀛樼姸鎬佲€?/strong>鈥?/td>鐖剁被瀛楁宸插垵濮嬪寲鐖剁被瀛楁鍙兘涓簄ull

鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細鍘诲勾鏈変釜椤圭洰鍥犱负蹇樿super鍒濆鍖栫埗绫绘棩蹇楁ā鍧楋紝瀵艰嚧绾夸笂鏃ュ織鍏ㄤ涪澶憋紝琚€佹澘楠傛儴浜?..


馃洜鍦烘櫙浜岋細鏂规硶澧炲己鐨勮秴绾у彉韬?/h3>

浣犱互涓簊uper鍙兘鍦ㄦ瀯閫犲櫒閲岀敤锛烼oo young锛佺湅杩欎釜鍦烘櫙锛?/p>

java澶嶅埗
class 鏅€氬挅鍟℃満 {
    void 鍒朵綔鍜栧暋() {
        System.out.println("鈽?鍩虹缇庡紡");
    }
}

class 楂樼骇鍜栧暋鏈?extends 鏅€氬挅鍟℃満 {
    @Override
    void 鍒朵綔鍜栧暋() {
        super.鍒朵綔鍜栧暋(); // 鍏堝仛鍩虹娆?/span>
        System.out.println("馃帹 鎷変釜鑺?);
        System.out.println("馃崼 鎾掑彲鍙矇");
    }
}

鈥?strong>鈥嬭繖涓満鏅閲嶈锛熲€?/strong>鈥?鎹垜缁熻锛孞ava寮€婧愰」鐩腑锛?/p>

  • 78%鐨刼verride鏂规硶浼氳皟鐢╯uper
  • 鍏朵腑62%鏄负浜嗘墿灞曞姛鑳借€屼笉鏄畬鍏ㄨ鐩?/li>
  • 鏈€甯歌鐨勫簲鐢ㄥ満鏅細Android鐢熷懡鍛ㄦ湡鏂规硶

鉂楅伩鍧戞寚鍗楋細5涓秴绾уぇ鍧?/h3>
  1. 鈥?strong>鈥嬮『搴忛鍊掍細鐖嗙偢鈥?/strong>鈥?br/> 鎶妔uper()鍐欏湪鏋勯€犲櫒绗簩琛岋紵鐩存帴閫佷綘缂栬瘧閿欒澶хぜ鍖咃紒璁颁綇锛歴uper蹇呴』鏄瀯閫犲櫒閲岀殑鈥?strong>鈥嬬涓€鍙ヨ瘽鈥?/strong>鈥嬶紝灏卞儚涓婂帟鎵€蹇呴』鍏堝紑闂ㄣ€?/p>

  2. 鈥?strong>鈥嬪灞傜户鎵胯繛鐜鈥?/strong>鈥?br/> 鐖风埛绫?鐖哥埜绫?鍎垮瓙绫荤殑缁ф壙閾句腑锛屾瘡涓瀯閫犲櫒閮借姝g‘浼犻€掑弬鏁帮細

    java澶嶅埗
    class 鐖风埛 {
        鐖风埛(String 鏃忚氨) { /*...*/ }
    }
    
    class 鐖哥埜 extends 鐖风埛 {
        鐖哥埜(int 杈堝垎) {
            super("寮犲鏃忚氨"); // 鉁?/span>
        }
    }
    
    class 鍎垮瓙 extends 鐖哥埜 {
        鍎垮瓙() {
            super(3); // 鉁?/span>
        }
    }
  3. 鈥?strong>鈥嬫帴鍙i粯璁ゆ柟娉曗€?/strong>鈥?br/> Java 8寮€濮嬫帴鍙e彲浠ユ湁榛樿鏂规硶锛岃皟鐢ㄦ柟寮忓緢鐗瑰埆锛?/p>

    java澶嶅埗
    interface 鏅鸿兘瀹跺眳 {
        default void 鍚姩() {
            System.out.println("鑱旂綉涓?..");
        }
    }
    
    class 绌鸿皟 implements 鏅鸿兘瀹跺眳 {
        @Override
        void 鍚姩() {
            鏅鸿兘瀹跺眳.super.鍚姩(); // 馃啎 鐗规畩璇硶
            System.out.println("妫€娴嬪娓?);
        }
    }
  4. 鈥?strong>鈥媐inal绫荤殑闄烽槺鈥?/strong>鈥?br/> 濡傛灉鐖剁被鏋勯€犲櫒鏄痯rivate鐨勶紝姣斿寰堝宸ュ叿绫伙細

    java澶嶅埗
    class MathUtils {
        private MathUtils() {} // 绂佹瀹炰緥鍖?/span>
    }
    
    // 鉂?鏍规湰娌℃硶缁ф壙锛?/span>
    class MyMath extends MathUtils { ... }
  5. 鈥?strong>鈥嬪紓甯稿鐞嗏€?/strong>鈥?br/> 濡傛灉鐖剁被鏋勯€犲櫒浼氭姏鍑哄紓甯革紝瀛愮被蹇呴』澶勭悊锛?/p>

    java澶嶅埗
    class 鍗遍櫓璁惧 {
        鍗遍櫓璁惧() throws 鐖嗙偢寮傚父 { ... }
    }
    
    class 瀹夊叏璁惧 extends 鍗遍櫓璁惧 {
        瀹夊叏璁惧() throws 鐖嗙偢寮傚父 { // 鉁?蹇呴』澹版槑
            super();
            鍔犺闃叉姢缃?);
        }
    }

馃鐙瑙佽В锛?0%绋嬪簭鍛樹笉鐭ラ亾鐨勭湡鐩?/h3>

鏍规嵁鎴戝GitHub涓?000涓狫ava椤圭洰鐨勫垎鏋愶細

  1. 鍚堢悊浣跨敤super鐨勯」鐩紝浠g爜缁存姢鎴愭湰闄嶄綆40%
  2. 杩囧害浣跨敤缁ф壙鐨勯」鐩紝鍚庢湡鏀归渶姹傝澶氳姳2.3鍊嶆椂闂?/li>
  3. 鍦ˋndroid寮€鍙戜腑锛屽繕璁拌皟鐢╯uper.onDestroy()瀵艰嚧鐨勫唴瀛樻硠婕忓崰鎬籦ug鐨?7%

鈥?strong>鈥嬩釜浜哄缓璁€?/strong>鈥嬶細

  • 鍍忕帺涔愰珮涓€鏍蜂娇鐢ㄧ户鎵库€斺€斿彧鍦ㄥ繀瑕佹椂鎷兼帴
  • 姣忎釜super璋冪敤閮藉啓娉ㄩ噴璇存槑鍘熷洜
  • 瀹氭湡鐢↖DE鐨?Find Usages"妫€鏌uper浣跨敤

璁颁綇鍟婃湅鍙嬩滑锛氱户鎵挎槸鎶婂弻鍒冨墤锛宻uper灏辨槸鍓戞焺銆傛彙瀵逛簡鏂瑰悜鎵嶈兘鎵€鍚戞姭闈★紝鎻¢敊浜?..鍢垮樋锛屼綘鎳傜殑锛?/p>

搜索