【Function Overriding】
virtual
: 當一個父合約的函數、modifier
或狀態變數被宣告virtual
時,表示他在之後繼承的合約中可以被改變(覆寫)。override
: 當一個子合約的函數、modifier
或狀態變數被宣告override
時,表示他正在改變(覆寫)父合約的函數。
pragma solidity ^0.8.11;
contract Base {
function foo() virtual public {}
}
contract Middle is Base {}
contract Inherited is Middle {
function foo() public override {}
}
Function Overriding 有以下規定和重點:
在多重繼承的時候,最根本的合約需要特別宣告
override
在函數中。如果這個函數的可視性為
private
則不能是virtual
。在介面中所有函數都會自動被視為
virtual
。可以同時override兩個父合約的函式,範例如下:
pragma solidity ^0.8.11;
contract Base1 {
function foo() virtual public {}
}
contract Base2 {
function foo() virtual public {}
}
contract Inherited is Base1, Base2 {
// Derives from multiple bases defining foo(),
// so we must explicitly override it
function foo() public override(Base1, Base2) {}
}
Last updated
Was this helpful?