中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中重寫和覆蓋怎么用

發布時間:2021-12-20 11:40:18 來源:億速云 閱讀:195 作者:小新 欄目:大數據

小編給大家分享一下Java中重寫和覆蓋怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

關于類的重寫和覆蓋,我們很容易把他們搞混淆,在Java中jvm會自動幫我們處理這樣的問題,但是在c#中咱們也有相關的關鍵字和處理方式,我們先來研究一下繼承關系中構造函數和方法的執行順序問題。

下面我們來個簡單的代碼

class A{    public A()    {        Console.WriteLine("這是a構造函數");    }    public void a()    {        Console.WriteLine("這是a方法");    }}class B : A{    public B()    {        Console.WriteLine("這是b構造函數");    }    public void b()    {        Console.WriteLine("這是b方法");    }}
class Program{    static void Main(string[] args)    {        Console.WriteLine("創建父級===============================================");        A a = new A();        Console.WriteLine("創建子級===============================================");        B b = new B();        Console.WriteLine("父級開始調用a方法======================================");        a.a();        Console.WriteLine("子級開始調用b方法======================================");        b.b();        Console.WriteLine("創建一個像父級的子級===================================");        A a1 = new B();        a1.a();        Console.Read();    }}

輸出如下

創建父級===============================================這是a構造函數創建子級===============================================這是a構造函數這是b構造函數父級開始調用a方法======================================這是a方法子級開始調用b方法======================================這是b方法創建一個像父級的子級===================================這是a構造函數這是b構造函數這是a方法

我們可以從上面的返回可以知道,在繼承關系中,先執行父級的構造函數,然后是子級構造函數,然后再調用方法。

當然這里注意的是,需要一個父類可以給一個子類或者父類實例,但是反過來不可以,這個是我們后面學的多態,或者可以說是里氏代換原則。

覆蓋  

覆蓋簡單的來說就是子類繼承父類,同時也繼承了不為私有的成員,如果說子類有一個與父類同方法簽名的方法,且沒有被重寫,那么我們在調用這個方法的時候由于父類的方法優先于子類的方法,子類被父類覆蓋。

下面我們來看一段代碼

class A{    public void a()    {        Console.WriteLine("這是父級a方法");    }}class B : A{    public void a()    {        Console.WriteLine("這是子級a方法");    }}
class Program{    static void Main(string[] args)    {        A a = new B();        a.a();        Console.Read();    }}
這是父級a方法

此時我們看到調用子類的方法時,被父類覆蓋了,調用了父級的方法。

這里我們值得注意的是編譯器已經出現了一處警告

Java中重寫和覆蓋怎么用

那么在c#中,new關鍵字的另一種用法就是消除覆蓋的警告

class B : A{    public new void a(){        Console.WriteLine("這是子級a方法");    }}

雖然我們加上這個new并沒有改變執行結果,畢竟我們要達到“0 error,0 warning”

那么有些時候,我父級的一個方法就是為了給子類擴展自己這個方法的特別之處,比如鳥類有翅膀,子類的燕子既有翅膀還飛得賊快,子類鴕鳥雖然有翅膀但它不能飛。別人就說所有的鳥都能飛,那么我給一個鴕鳥給他是不是證明了他說的是錯誤的。

只要能用到父級的地方,我們都能夠用他的子類來代替,因為子類包括父類的特征,這個就是我們面向對象原則里面的里氏代換原則。有些時候父級的一些方法不能實現我們想要的效果,那么我們就重寫這個父類的這個方法。

重寫  

重寫也是在父子繼承關系中存在的,重寫父級的方法用關鍵字virtual標記父級的方法,表示這個方法是一個虛方法(有些地方叫虛函數,都差不多),在子級用override重寫父級標記的方法,這兩個關鍵字是一起使用的。如果父級virtual標記了但是子級沒有使用override重寫,那是沒有效果的,下面看代碼:

class A{    public virtual void a()    {        Console.WriteLine("這是父級a方法");    }}class B : A{    public override void a()    {        Console.WriteLine("這是重寫父級a方法");    }}class Program{    static void Main(string[] args)    {        A a = new B();        a.a();    }}
這是重寫父級a方法

我們區分重寫和覆蓋,它真的非常重要,重寫是面向對象中一個非常重要的基礎。

總結:

覆蓋:使用父類創建子類,由于父類的方法先執行,所有子類的方法被覆蓋,使用關鍵字new來消除編譯器的警告。

重寫:父類的方法需要用virtual標記為虛方法,子類使用override重寫父類的虛方法。使用父類對象創建一個子類對象代替,子類方法重寫父類方法,每個子類都不一樣,我們要靈活使用

以上是“Java中重寫和覆蓋怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民权县| 建始县| 吉木萨尔县| 肃北| 昂仁县| 全椒县| 泉州市| 泰兴市| 民丰县| 洞口县| 怀安县| 吉隆县| 册亨县| 汤原县| 比如县| 灌云县| 桐柏县| 西藏| 右玉县| 铜梁县| 满洲里市| 剑河县| 兴文县| 当雄县| 平阳县| 昭平县| 茂名市| 三穗县| 易门县| 梧州市| 德阳市| 光泽县| 邵武市| 宣武区| 临洮县| 滨州市| 海安县| 金川县| 芮城县| 萨迦县| 白城市|