Solidity是一种面向对象的编程语言,它支持合约之间的继承。继承允许一个合约获取另一个合约的所有非私有属性和函数,这样就可以重复使用代码,降低重复工作量。继承关键字在Solidity中,继承是通过is关键字来实现的。
Solidity是一种面向对象的编程语言,它支持合约之间的继承。继承允许一个合约获取另一个合约的所有非私有属性和函数,这样就可以重复使用代码,降低重复工作量。
在Solidity中,继承是通过is
关键字来实现的。
virtual
和 override
关键字在 Solidity 0.6.0 版本及以后,引入了 virtual
和 override
关键字用来显式控制函数和状态变量的可重写性。在实际开发中,使用 virtual
和 override
是最佳实践,以确保合约的可读性和安全性。
virtual
:用于标记父合约中的函数,表示该函数可以在子合约中被重写。override
:用于标记子合约中的函数,表示该函数重写了父合约中的函数。// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// 定义父合约
contract Parent {
string public name;
uint public age;
// 构造函数
constructor(string memory _name, uint _age) {
name = _name;
age = _age;
}
// 设置名称函数
function setName(string memory _name) public virtual {
name = _name;
}
// 设置年龄函数
function setAge(uint _age) public virtual {
age = _age;
}
}
// 定义子合约,继承自 Parent
contract Child is Parent {
string public school;
// 构造函数
constructor(string memory _name, uint _age, string memory _school) Parent(_name, _age) {
school = _school;
}
// 设置学校函数
function setSchool(string memory _school) public {
school = _school;
}
// 重载父合约的 setName 函数
function setName(string memory _name, string memory _school) public override {
name = _name;
school = _school;
}
// 调用父合约的 setAge 函数
function incrementAge() public {
setAge(age + 1);
}
// 获取所有信息
function getInfo() public view returns (string memory, uint, string memory) {
return (name, age, school);
}
}
父合约 Parent:
setName
和 setAge
函数使用了 virtual
关键字,表示这些函数可以在子合约中被重写。子合约 Child:
setName
函数使用了 override
关键字,表示它重写了父合约中的 setName
函数。构造函数:
name
和 age
,同时初始化 school
。virtual
和 override
的好处virtual
和 override
明确标识哪些函数可以被重写,增加代码的可读性。如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!