<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    慘淡人生,平淡生活

    The Feature Is Stupid

    關于extends 和 constructor的默認實現與覆蓋策略

    今天在TSS上又看到有人討論java多繼承的問題,是想起這個話題的原因。^_^


    java中任何類都默認繼承 Java.lang.Object,除非被另一個繼承覆蓋(override),hoho 俺一直這么稱呼override的,感覺更加貼切一些。
    請看以下代碼:

    package org.myth.test;

    public class SuperSon{
        
        SuperSon(){
            System.out.println(
    "this is super son");
        }

    }

    對于編譯器來說,這段代碼會被首先補全為:

    package org.myth.test;

    public class SuperSon extends Object{
        
        SuperSon(){
            System.out.println(
    "this is super son");
        }

    }

    對待任何一個類,編譯器會去檢查extends關鍵字,如果沒有,編譯器會默認添加extens Object

    extends Object就是一段默認隱藏的代碼,同樣在Constructor中,也有一段默認隱藏的代碼。

    package org.myth.test;

    public class SuperSon extends Object{
        
        SuperSon(){
            
    super();//這就是一段默認隱藏代碼
            System.out.println("this is super son");
        }

        //
    整個構造方法也是一段默認隱藏代碼

    }

    如同編譯類時編譯器回去檢查extends關鍵字一樣,編譯器會首先檢查是否存在constructor,如果沒有,默認增加ClassName()構造方法。
    在構造方法內部,編譯器會檢查第一行代碼是否為super構造方法,如果不是,默認添加super()

    這個就是為什么 new一個對象的時候,首先調用的是父類的構造方法。

    一個錯誤代碼示例:
    package org.myth.test;

    public class SuperMan {
        
        SuperMan(String s){
            System.out.println(
    "this is super man");
        }

    }



    package org.myth.test;

    public class SuperSon extends SuperMan{
        
        SuperSon(){
            System.out.println(
    "this is super son");
        }

    }


    嘿嘿 第一篇文章

    posted on 2008-05-28 10:44 季失羽 閱讀(1295) 評論(10)  編輯  收藏

    評論

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-28 11:11 Happy漫步者

    不錯 關注下^_^  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-28 11:13 Happy漫步者

    第一篇文章 我收藏拉   回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-28 11:40 隔葉黃鶯

    博主可由此延展一下,在父類沒有默認構造函數時,對子類構造函數有什么要求。  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-28 13:41 季失羽

    @隔葉黃鶯
    這個問題,你看我最后一個錯誤代碼示例 就知道了 ^_^  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略[未登錄] 2008-05-28 21:26 Matthew Chen

    黃鶯真的很認真啊。
    對于lz說的被另一個繼承覆蓋(override)的說法,怎么看得別扭,就是繼承自非object的類就好了,沒必要太復雜。  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-28 21:41 隔葉黃鶯

    最后一段錯誤代碼,你還沒有說明白錯誤的原因,也沒給出解決的辦法。

    只要知道子類和父類之間是一種 Has-A 的關系就好理解了,在父類沒有默認構造方法時,在創建子類實例時,它就無從獲悉該如何實例化出它的部分--父類實例,super() 已經不見效了,因為父類不存在 super() 了,所以就要求在子類的構造方法中顯式的調用父類的某個構造方法。  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-29 10:00 季失羽

    @隔葉黃鶯
    在構造方法內部,編譯器會檢查第一行代碼是否為super構造方法,如果不是,默認添加super()
    按照上面這句話的理解 就是
    package org.myth.test;

    public class SuperSon extends SuperMan{

    SuperSon(){
    System.out.println("this is super son");
    }

    }

    其實等同于
    package org.myth.test;

    public class SuperSon extends SuperMan{

    SuperSon(){
    super();
    System.out.println("this is super son");
    }

    }

    顯然,父類中是不存在無參數構造方法的,所以編譯器回報錯,不存在super()構造方法。


    另外,對于您說的has-a的關系,特定界定之下可以這么講,但是更準確而言,子類是父類 應該是is a 的關系。  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-29 10:02 季失羽

    @Matthew Chen
    是,繼承另一個類也許更加清楚一些,但是 既然文章的主要意思是說默認實現與覆蓋關系的 hoho 這么說是一種慣性XD  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略 2008-05-29 12:28 隔葉黃鶯

    要繼承一個無默認構造方法的父類,在子類中應如何處理還可以說明白一些

    其實只要記住這一點,在構造子類實例前必須構造一個父類實例作為子類實例的部分,所以從這一層面講存在一種 has-a 關系。

    在C++或某些具體面對象的C組件中很清楚體現這一點,父類實例要放在子類實例的首地址,所以才能保證向上安全轉型

    如果沒有默認增加ClassName()構造方法。 這句話不是很好理解,沒有增加ClassName()構造方法是人的行為,不存在是否默認

    關于對象模型,C++有些書籍講述的比較透沏。  回復  更多評論   

    # re: 關于extends 和 constructor的默認實現與覆蓋策略[未登錄] 2008-05-29 19:08 季失羽

    @隔葉黃鶯
    在構造子類實例前必須構造一個父類實例作為子類實例的部分
    這句話太正確了。

    如果沒有默認增加ClassName()構造方法。
    暈,剛剛發現,句讀錯了,中間有個逗號。汗一個 XD
    如果沒有,默認增加ClassName()構造方法。

    其實 俺這篇文字 完全可以三句話說完的

    第一句,任何一個類都有Constructor
    第二句,任何一個類的Constructor第一行代碼就是調用父類的構造函數
    第三局,就是 以上兩句說的東西,你可以代碼中不寫,因為有默認實現,并且默認實現與編碼出來的實現不能并存,會被覆蓋。

    XD 騙字數而已 XD  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 中文字幕在亚洲第一在线| 毛片免费全部免费观看| 男人的好免费观看在线视频| 亚洲AV成人片色在线观看高潮| 亚洲一本大道无码av天堂| 亚洲国产精品精华液| 无限动漫网在线观看免费| 丁香婷婷亚洲六月综合色| 可以免费看黄的网站| 亚洲综合色一区二区三区| 在线观看免费污视频| 国产成人久久精品亚洲小说| 亚洲av再在线观看| 在线视频网址免费播放| 亚洲AV福利天堂一区二区三| 美丽的姑娘免费观看在线播放| 在线观看成人免费| 国产亚洲视频在线播放大全| 亚洲狠狠爱综合影院婷婷| 色屁屁www影院免费观看视频| 99re免费99re在线视频手机版| 狼友av永久网站免费观看| 亚洲最大av资源站无码av网址| 亚洲成av人片在www鸭子| 成人人免费夜夜视频观看| 亚洲精品美女久久7777777| 免费a级黄色毛片| 中文字幕久无码免费久久| 毛片无码免费无码播放| 亚洲天然素人无码专区| 国产成人涩涩涩视频在线观看免费| 亚洲av无码乱码国产精品fc2| 亚洲av无码成人影院一区 | 亚洲AV无码专区电影在线观看| 亚洲成人福利在线观看| 美女被免费网站91色| 亚洲精品综合久久中文字幕 | 2021在线永久免费视频| 亚洲日韩一区精品射精| 久久综合亚洲色HEZYO国产| 亚欧在线精品免费观看一区|