【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?