今天來聊聊關於 contracts 的繼承
關於 contracts 其實它是支援多重繼承,在這方面上是跟 python 是一樣的,它是透過關鍵字 is
來選擇要繼承的對象。我們看看下面的範例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
// 這是父層的合約
contract A {
function Name() public pure virtual returns (string memory) {
return "A";
}
}
//透過 is 的關鍵字 B 繼承 A ,然後透過 ovverride 複寫 Name()
contract B is A {
function Name() public pure virtual override returns (string memory) {
return "B";
}
}
//跟上面一樣 複寫 Name()
contract C is A {
function Name() public pure virtual override returns (string memory) {
return "C";
}
}
// 這個合約繼承 B 跟 C ,但合約繼承會從右邊為繼承,所以它的 override裏面的對象,會針對c 也就是它的 super 層會回覆 c
contract D is B, C {
//會回覆"C"
function Name() public pure override(B, C) returns (string memory) {
return super.foo();
}
}
再來我們聊聊抽象合約,其實 solidity,有一個抽象合約的規格,我們看看下面範例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
// 這是抽象合約
abstract contract A {
function Name() public pure virtual returns (string memory);
}
contract B is A {
function Name() public pure override returns (string memory) {
return "B";
}
}
既然有 abstruct ,那就一定有 interface ,明天我們就來聊聊 interface。