【发布时间】:2023-01-25 07:10:19
【问题描述】:
继承在 Solidity 中究竟是如何工作的? 我有以下代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Golem {
int public hp = 100;
int internal attack = 20;
int private attackMod = 2;
function takeDmg(int dmg) public{
hp = hp - dmg;
}
function attackBasic() public view returns(int){
return attack * attackMod;
}
}
contract FireGolem is Golem {}
我理解继承的方式是,基本上所有的代码都是在 FireGolem 中获取和“复制”的。
但是private变量有什么用呢?由于 private 变量“在派生合同中看不到”。
(使用混音)
如果我保持原样并部署 FireGolem,那么我可以调用 attackBasic 函数并获取值 40。所以看起来我可以访问 private 变量。
但是如果我在 FireGolem 中添加另一个函数:
function test() public view returns(int){
return attack * attackMod;
}
然后我会得到一个错误,“未声明的标识符”,这意味着我无法访问该变量。
这里发生了什么?
【问题讨论】:
标签: inheritance ethereum solidity