跳到主要內容

【開發智能合約 - Solidity系列】實作篇Ep.11 - 繼承同源但不同意圖的函數覆寫(Function Overriding)

 

圖片來源

我們在「【開發智能合約 - Solidity系列】實作篇Ep.9 - 何謂繼承(Inheritance)」有提到繼承的一些基本概念,然而在繼承的過程中我們可能會用到上游的方法,甚至加工,而方法名稱重複了,是否能被允許呢? 答案是「允許」的,就好比我們雖然繼承了父親的「處事技巧」,但在求新求變的時代中,或許傳統的老舊方法已經不適用於現代,因此就需要覆寫掉「處事技巧」這個方法,甚至基於傳統的方法之後進行擴增,而Solidity提供了繼承當然也支援了覆寫的方式,讓整個合約更加彈性。

但有幾個值得注意的是,當我們的合約欲設計為可覆寫的方法時,需要加入兩個重要的關鍵字,分別為:

- virtual: 被繼承的合約方法需要標示此關鍵字之後,該方法才能被覆寫。
- override: 標示該方法以覆寫後的形式呈現。


contract Parent {
    /// @notice 工作
    /// @dev 欲被繼承的方法應使用virtual關鍵字宣告 
    function doJob() public pure virtual {
			...
    }
}

contract Child is Parent {
    /// @notice 工作
    /// @dev 繼承並覆寫應使用override關鍵字宣告
    function doJob() public pure override {
        ...
    }
}

另外我們也可以用「擴充」的觀點來進行覆寫的功能加強。

contract Parent {
    event Log(string msg);

    /// @notice 工作
    /// @dev 欲被繼承的方法應使用virtual關鍵字宣告 
    function doJob() public virtual {
        emit Log("i am parent");
    }
}

contract Child is Parent {

    /// @notice 工作
    /// @dev 繼承並覆寫應使用override關鍵字宣告
    function doJob() public override {
        /// @dev 呼叫上游的方法
        super.doJob();

        /// @dev 再進行擴充
        emit Log("i am child");
    }
}

實際Demo範例

我們一樣使用Solidity Remix Editor來進行合約的測試,如果不清楚如何進行Debug的朋友歡迎先來閱讀此篇「【開發智能合約 - Solidity系列】環境與工具篇:如何使用Remix進行Debug」,接著我們就直接進行Deploy到暫存鏈進行測試如下:

圖片來源

結語

玩到這邊,漸漸的發現其實Solidity融合了物件導向的概念,不僅具有物件、介面、繼承…,更是能夠進行override,對於物件導向基礎已經打的非常穩固的朋友來說應該相當的容易入門,而我們學習物件導向的過程中應該常常被「overriding」與「overloading」搞混對吧! 這兩個名詞的理解其實是有訣竅的哦! 我們下一篇「【開發智能合約 - Solidity系列】實作篇Ep.12 - 合約內同名但不同用途的函數超載(Function Overloading)」就會帶大家如何識別這兩個相似名詞的差異。

今天的範例都在這裡「📦 solidity-remix-toturial/Ep11」歡迎自行取用。

📚 更多關於Solidity的文章請看這裡…

--------------------------------------------------------------------------------

喜歡撰寫文章的你,不妨來了解一下:
Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?
歡迎加入一起練習寫作,賺取知識,累積財富!

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!