3分钟Solidity: 4.11 影子化继承状态变量

27 阅读1分钟

如需获取本内容的最新版本,请参见 Cyfrin.io 上的“Shadowing Inherited State Variables (Code Example)”

与函数不同,状态变量无法通过在子合约中重新声明来覆盖。

让我们学习如何正确覆盖继承的状态变量。

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

contract A {
    string public name = "Contract A";

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

// Solidity 0.6 中不允许变量遮蔽
// 这将无法编译
// contract B is A {
//     string public name = "Contract B";
// }

contract C is A {
    // 这是正确覆盖继承状态变量的方法。
    constructor() {
        name = "Contract C";
    }

    // C.getName returns "Contract C"
}

Remix Lite 尝试一下

solidity-shadowing


END