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

閱讀時間約 4 分鐘
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。
為什麼需要繼承呢?因為如果有一個智能合約文件裡面有很多的合約,但合約裡面的很多屬性和方法都很相同,只有部份差異而已,這樣寫法就會很多餘,太多相同的了,如果有一個父合約,把相同的部份都寫在一起,然後其他子合約繼承這個父合約,然後子合約再加入自己差異的部份就好,這樣整份的智能合約看起來就會乾淨多了。
繼承寫法很簡單,就是在子合約後面加入"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
更換CONTRACT的下拉為"B - contracts/A.sol",按下Deploy,下面應該會出現B的地址
更換CONTRACT,參數"_name"帶入"This is C",然後按Deploy,下面應該會出現C的地址
展開就可以對其做操作了,跟上一篇的操作方法相同,由於發佈的是Local端,所以可以放心的操作,不用怕
上面是簡單的繼承和怎麼帶入參數,下面來講一下多重繼承

多重繼承的寫法和繼承也差不多,只是在於同一個合約可以同時繼承多個合約而已,寫法如下:
// 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) {
  }
}
實作起來大概如下:
C contract同時會有A和B的屬性和方法,所以我們就直接看C就好了,從上圖可以看到,C可以帶入三個參數
從上圖實作出來的屬性和方法就可以看出,C contract同時繼承了A和B,所以才會有五個項目出現,各位可以實作看看,能夠幫忙您加深印象,以上就是繼承和多重繼承的寫法,希望對您了解智能合約的繼承方面有幫忙。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
所以寫程式的人都知道的一句話:「Hello World」,每一個學程式語言開始的時候都是從這句話開始的,我們也不免俗的來上這一句,從Hello World來看看智能合約入門是個什麼樣子。
上班族上班的時候,不太方便開Max或是幣安等交易所查看幣價的時候該怎麼辦呢?這篇就教你怎麼在Google試算表上就能查看幣價。
當有了初步的認識後,在要開始寫程式之前當然是要選擇用什麼IDE。 如果是線上IDE的話可以用Remix這是一個線上的Solidity IDE,可以用來撰寫Solidity 但我個人是比較習慣微軟的Visual Studio Code(之後簡稱VS Code)來撰寫,兩者其實都可以,看個人習慣。
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
智能合約(英語:Smart contract)是一種特殊協定,在區塊鏈內製定合約時使用,當中內含了程式碼函式 (Function),亦能與其他合約進行互動、做決策、儲存資料及傳送以太幣等功能(出處:維基百科),簡單的說就是在區塊鏈上做以太幣的交易或互動的一種程式(合約)。
這篇我們來談談有關Solidity Function visibility(能見度) Solidity的function visibility有四個關鍵字(private、internal、external或public)。
所以寫程式的人都知道的一句話:「Hello World」,每一個學程式語言開始的時候都是從這句話開始的,我們也不免俗的來上這一句,從Hello World來看看智能合約入門是個什麼樣子。
上班族上班的時候,不太方便開Max或是幣安等交易所查看幣價的時候該怎麼辦呢?這篇就教你怎麼在Google試算表上就能查看幣價。
當有了初步的認識後,在要開始寫程式之前當然是要選擇用什麼IDE。 如果是線上IDE的話可以用Remix這是一個線上的Solidity IDE,可以用來撰寫Solidity 但我個人是比較習慣微軟的Visual Studio Code(之後簡稱VS Code)來撰寫,兩者其實都可以,看個人習慣。
Solidity:用來撰寫智能合約的程式語言之一,也是最多人用的 Vyper:用來撰寫智能合約的程式語言之二,Vyper 是一種面向合約的Pythonic編程語言
智能合約(英語:Smart contract)是一種特殊協定,在區塊鏈內製定合約時使用,當中內含了程式碼函式 (Function),亦能與其他合約進行互動、做決策、儲存資料及傳送以太幣等功能(出處:維基百科),簡單的說就是在區塊鏈上做以太幣的交易或互動的一種程式(合約)。
你可能也想看
Google News 追蹤
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
这篇文章主要介绍了智能合约地址什么意思?智能合约安全吗?的相关资料,智能合约是表示为一段代码的合约,旨在执行一组指令。很多人不知道是智能合约地址什么意思,下面小编带大家深入的了解一下,一起来看看吧! 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
Thumbnail
整理遺產繼承中被繼承人往生時的保險問題,包括要保人、被保險人為同一人或不同人時的情況,以及繼承中需要注意的事項。
Thumbnail
隨著Blockchain 的日益成熟,智能合約已經成為改變多個行業,包括IT服務行業的一種重要技術。智能合約不僅提高了交易的透明度,還增強了合約執行的自動化和安全性。本文將介紹智能合約的基本概念、在IT服務管理中的具體應用,以及實施時可能遇到的挑戰。
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
分割協議繼承登記這件事 民法是民國18年施行繼承的規定 從此確立繼承的法條 很多考試都會考 所以大家應該也不陌生 但是…實務運用,還是套在實際情況最容易記 今天想要來談談分割繼承登記 繼承登記有分好幾種:公同共有繼承、一般繼承、分割繼承登記 前面二種今天不談 我今天要來談的是分割
類似於trait/typeclass的特性系統能提供程式「延展性」,它能讓函式針對不同的類型做出不同的行為。這種機制與物件導向的繼承非常像,然而特性系統的彈性比較大一點,而且概念上也有一些差別。為了探討討論這些差異,我們必須深入了解繼承機制到底是什麼。 繼承並不是建立子類關係的唯一方法。所謂的
Thumbnail
法律主要缺點就是模糊與不確定,卻也成其最大的優點,因為具有靈活和適應程度的契約規則。智能合約主要優點就是自主保證執行,卻構成其最大的限制,導致過度僵化和無法持續與環境同步。只有時間才能證明區塊鏈技術及是否會真正轉變且滲入我們的世界,也就是Web3世界的到來。而我相信智能法律合約將會是未來的發展趨勢!
呈上篇[Python基礎]類別繼承(Inheritance) 中使用的super()並加以說明,此篇文章主要敘述使用super()有什麼好處及優點。 super():是一個內建函數,用來返回父類別的物件,以便你可以使用這個物件來呼叫父類別的方法或屬性。 這種做法的目的是在子類別中繼承並延續父類別
这篇文章主要介绍了智能合约地址什么意思?智能合约安全吗?的相关资料,智能合约是表示为一段代码的合约,旨在执行一组指令。很多人不知道是智能合约地址什么意思,下面小编带大家深入的了解一下,一起来看看吧! 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
Thumbnail
整理遺產繼承中被繼承人往生時的保險問題,包括要保人、被保險人為同一人或不同人時的情況,以及繼承中需要注意的事項。
Thumbnail
隨著Blockchain 的日益成熟,智能合約已經成為改變多個行業,包括IT服務行業的一種重要技術。智能合約不僅提高了交易的透明度,還增強了合約執行的自動化和安全性。本文將介紹智能合約的基本概念、在IT服務管理中的具體應用,以及實施時可能遇到的挑戰。
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
分割協議繼承登記這件事 民法是民國18年施行繼承的規定 從此確立繼承的法條 很多考試都會考 所以大家應該也不陌生 但是…實務運用,還是套在實際情況最容易記 今天想要來談談分割繼承登記 繼承登記有分好幾種:公同共有繼承、一般繼承、分割繼承登記 前面二種今天不談 我今天要來談的是分割
類似於trait/typeclass的特性系統能提供程式「延展性」,它能讓函式針對不同的類型做出不同的行為。這種機制與物件導向的繼承非常像,然而特性系統的彈性比較大一點,而且概念上也有一些差別。為了探討討論這些差異,我們必須深入了解繼承機制到底是什麼。 繼承並不是建立子類關係的唯一方法。所謂的
Thumbnail
法律主要缺點就是模糊與不確定,卻也成其最大的優點,因為具有靈活和適應程度的契約規則。智能合約主要優點就是自主保證執行,卻構成其最大的限制,導致過度僵化和無法持續與環境同步。只有時間才能證明區塊鏈技術及是否會真正轉變且滲入我們的世界,也就是Web3世界的到來。而我相信智能法律合約將會是未來的發展趨勢!