vocus logo

方格子 vocus

智能合約開發實戰(六) - 繼承(Inheritance)與多重繼承

更新 發佈閱讀 5 分鐘

繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。

為什麼需要繼承呢?因為如果有一個智能合約文件裡面有很多的合約,但合約裡面的很多屬性和方法都很相同,只有部份差異而已,這樣寫法就會很多餘,太多相同的了,如果有一個父合約,把相同的部份都寫在一起,然後其他子合約繼承這個父合約,然後子合約再加入自己差異的部份就好,這樣整份的智能合約看起來就會乾淨多了。

繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了,再來是帶參數的法式,方法也有很多種,我就簡單的二種帶參數的方式:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

contract A {
  string public name;

  constructor(string memory _name) {
    name = _name;
  }

  function getContractName() public view virtual returns(string memory) {
    return name;
  }

//方法一:B繼承了A,然後直接用A帶參數
contract B is A("B") {
}

//方法二:C繼承了A,然後在constructor初始化內帶入參數
contract C is A {
  constructor(string memory _name) A(_name) {
  }
}

然後Deploy A,參數"_name"帶入"A",然後按Deploy

raw-image

更換CONTRACT的下拉為"B - contracts/A.sol",按下Deploy,下面應該會出現B的地址

raw-image

更換CONTRACT,參數"_name"帶入"This is C",然後按Deploy,下面應該會出現C的地址

raw-image

展開就可以對其做操作了,跟上一篇的操作方法相同,由於發佈的是Local端,所以可以放心的操作,不用怕

raw-image

上面是簡單的繼承和怎麼帶入參數,下面來講一下多重繼承


多重繼承的寫法和繼承也差不多,只是在於同一個合約可以同時繼承多個合約而已,寫法如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;

contract A {
  string public name;

  constructor(string memory _name) {
    name = _name;
  }

  function getContractName() public view virtual returns(string memory) {
    return name;
  }
}

contract B {
  string public helloworld;
  string public hellowworld2;

  constructor(string memory _helloworld, string memory _helloworld2) {
    helloworld = _helloworld;
    hellowworld2 = _helloworld2;
  }

  function gethelloworld() public view virtual returns(string memory) {
    return helloworld;
  }
}

//C繼承了A也繼承了B, 及帶參數的方式
contract C is A, B {
  constructor(string memory _name, string memory _helloworld, string memory _helloworld2) A(_name) B(_helloworld, _helloworld2) {
  }
}

實作起來大概如下:

raw-image

C contract同時會有A和B的屬性和方法,所以我們就直接看C就好了,從上圖可以看到,C可以帶入三個參數

raw-image

從上圖實作出來的屬性和方法就可以看出,C contract同時繼承了A和B,所以才會有五個項目出現,各位可以實作看看,能夠幫忙您加深印象,以上就是繼承和多重繼承的寫法,希望對您了解智能合約的繼承方面有幫忙。

有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。



留言
avatar-img
宅D嘉的開發人生
22會員
53內容數
加密貨幣很有趣,遊戲開發也很有趣,AI也有點意思,身為一個跨多領域的軟體工程師,喜歡研究新鮮的事物,歡迎來到我的世界,一起坐上這艘開往未來探索新奇的列車。
宅D嘉的開發人生的其他內容
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/28
    每個程式開發的開始都是從Hello World開始的,當然我也不免淑的來個Hello World。
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/22
 Cocos Creator 2D實戰(一) 環境設定 第二步先做環境設定:環境設定、VS Code 正常來說跟著做就可以完成環境設定了,由於是開發2D,所以右上角先選擇2.4版(目前最高版本)會比較好,比較不容易錯亂,畢竟3.x和2.x的差異很大。
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
2025/03/21
Cocos Creator 實戰     Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE),程式語言是使用Javascript或TypeScript,Unity是用C#,但如果是Cocos Creator 3D的話是只能用TypeScript,所以建議還是用TypeS
Thumbnail
看更多
你可能也想看
Thumbnail
如果你也是那種在職場上追求極致效率,對生活品質有堅持,且渴望一段成熟、穩定、不拖泥帶水關係的專業人士,那麼 Ping! 會是你目前市面上最值得嘗試的選擇。 成熟的大人,不需要在低效的社交中消磨熱情。讓 Ping!,為你的情感生活進行「降噪」,把精力和時間,留給那個真正能與你靈魂共鳴、頻率一致的人。
Thumbnail
如果你也是那種在職場上追求極致效率,對生活品質有堅持,且渴望一段成熟、穩定、不拖泥帶水關係的專業人士,那麼 Ping! 會是你目前市面上最值得嘗試的選擇。 成熟的大人,不需要在低效的社交中消磨熱情。讓 Ping!,為你的情感生活進行「降噪」,把精力和時間,留給那個真正能與你靈魂共鳴、頻率一致的人。
Thumbnail
厭倦只看外貌的交友方式嗎?Ping!主打真實、安全的深度交友體驗,透過真人驗證與多樣化的個人化問答,幫助使用者在認識彼此之前,先理解價值觀、關係期待與交友目標。即使是慢熟的 I 人,也能透過提問找到適合的人選,避免聊到一半才發現方向不同。適合想被理解、重視心理連結與安心互動的你。
Thumbnail
厭倦只看外貌的交友方式嗎?Ping!主打真實、安全的深度交友體驗,透過真人驗證與多樣化的個人化問答,幫助使用者在認識彼此之前,先理解價值觀、關係期待與交友目標。即使是慢熟的 I 人,也能透過提問找到適合的人選,避免聊到一半才發現方向不同。適合想被理解、重視心理連結與安心互動的你。
Thumbnail
Ping!主打真人驗證機制,透過AI人臉比對確保用戶真實性,讓人放心。獨特的照片主題功能、個性化標籤和趣味文字問答,讓用戶更深入展現自我,為開啟話題提供契機,甚至有機會找到擁有相似冷門興趣的同好。Ping!注重高品質的交友關係,透過共同點建立雙方的連結,為現代人提供一個舒適、真實且有意義的交友環境。
Thumbnail
Ping!主打真人驗證機制,透過AI人臉比對確保用戶真實性,讓人放心。獨特的照片主題功能、個性化標籤和趣味文字問答,讓用戶更深入展現自我,為開啟話題提供契機,甚至有機會找到擁有相似冷門興趣的同好。Ping!注重高品質的交友關係,透過共同點建立雙方的連結,為現代人提供一個舒適、真實且有意義的交友環境。
Thumbnail
也許不是我不適合交友,而是我適合的節奏,本來就比較慢。 比起快速認識很多人,我更在意人與人怎麼相遇,才不會那麼累。當對話可以慢慢發生,當我們從想法開始靠近彼此,那種剛剛好的距離,反而讓人更願意走近。
Thumbnail
也許不是我不適合交友,而是我適合的節奏,本來就比較慢。 比起快速認識很多人,我更在意人與人怎麼相遇,才不會那麼累。當對話可以慢慢發生,當我們從想法開始靠近彼此,那種剛剛好的距離,反而讓人更願意走近。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
我們上一篇有介紹了「【開發智能合約 — Solidity系列】實作篇Ep.11 — 繼承同源但不同意圖的函數覆寫(Function Overriding)」學習到overriding這個關鍵字的概念,而今天介紹另一個非常相似的名詞overloading(超載),兩者看似很像,但本質上卻存在著非常大的
Thumbnail
我們上一篇有介紹了「【開發智能合約 — Solidity系列】實作篇Ep.11 — 繼承同源但不同意圖的函數覆寫(Function Overriding)」學習到overriding這個關鍵字的概念,而今天介紹另一個非常相似的名詞overloading(超載),兩者看似很像,但本質上卻存在著非常大的
Thumbnail
Interface我們就將之想像成是一種標準化的規範,在產品還沒開發出來之前,我們心中想必已經有個藍圖,嗯…,這個功能需要什麼樣的功能,這時候就可以來制定介面,以「設計」為出發點而後再進入「實作」,如此一來我們在設計階段就能發現一些盲點,減少經過實作過程才發現的窘境,節省繁複修改的成本,而且介面定義
Thumbnail
Interface我們就將之想像成是一種標準化的規範,在產品還沒開發出來之前,我們心中想必已經有個藍圖,嗯…,這個功能需要什麼樣的功能,這時候就可以來制定介面,以「設計」為出發點而後再進入「實作」,如此一來我們在設計階段就能發現一些盲點,減少經過實作過程才發現的窘境,節省繁複修改的成本,而且介面定義
Thumbnail
介紹 何謂原則(Principle) A principle is a concept or value that is a guide for behavior or evaluation 所謂【原則】(Principle)就是一種【概念】或【價值】,用來導引你產生適切的行為與價值評量方法 白話文
Thumbnail
介紹 何謂原則(Principle) A principle is a concept or value that is a guide for behavior or evaluation 所謂【原則】(Principle)就是一種【概念】或【價值】,用來導引你產生適切的行為與價值評量方法 白話文
Thumbnail
以下會舉一個簡單的生活例子 (Inherit 繼承) 以顯示出Inheritance 的基本用法, 以下供各位參考: 相關頁面: C#繼承 – Inheritance 繼承 的基本用法 – 加入 for loop, if, Array, Collection的例子
Thumbnail
以下會舉一個簡單的生活例子 (Inherit 繼承) 以顯示出Inheritance 的基本用法, 以下供各位參考: 相關頁面: C#繼承 – Inheritance 繼承 的基本用法 – 加入 for loop, if, Array, Collection的例子
Thumbnail
講完Import,這一篇我們來講講也是很重要的Library,我們之前有提到,程式是愈直覺簡單愈好,可以大大的減少維護成本,把可以共用的部份都抽離出來寫成部份程式碼就是我們今天要講的Library,可以是共用的功能或是檢查。 Library.sol testLibrary.sol
Thumbnail
講完Import,這一篇我們來講講也是很重要的Library,我們之前有提到,程式是愈直覺簡單愈好,可以大大的減少維護成本,把可以共用的部份都抽離出來寫成部份程式碼就是我們今天要講的Library,可以是共用的功能或是檢查。 Library.sol testLibrary.sol
Thumbnail
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
Thumbnail
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
Thumbnail
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法以及其他程式呼叫範例。
Thumbnail
這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法以及其他程式呼叫範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News