스마트 컨트랙트 내에서 상속이란, 재산이나 권리를 주는 것이 아닌, 변수와 함수들을 넘겨주는 것.
// SPDX-License-Identifier:GPL-30
pragma solidity >=0.7.0 <0.9.0;
contract Father {}
contract Son {}
예를 들어, Father, Son 두 개의 부자 관계 컨트랙트가 있을 경우, Father 컨트랙트에 기능을 구현 후 Son 컨트랙트가 기능을 상속 받도록 구현함.
// SPDX-License-Identifier:GPL-30
pragma solidity >=0.7.0 <0.9.0;
contract Father {
string public familyName = "Lee";
string public givenName = "MinSang";
uint256 public money = 100;
function getFamilyName() public view returns (string memory) {
return familyName;
}
function getGivenName() public view returns (string memory) {
return givenName;
}
function getMoney() public view returns (uint256) {
return money;
}
}
Father 컨트랙트에는 3개의 변수, 함수가 있음.
이 3개의 변수와 함수를 Son 컨트랙트에서 상속 받아, 접근 해보려고 함.
상속받을컨트랙트 is 상속해주는컨트랙트 {}
// SPDX-License-Identifier:GPL-30
pragma solidity >=0.7.0 <0.9.0;
contract Father {
string public familyName = "Lee";
string public givenName = "MinSang";
uint256 public money = 100;
function getFamilyName() public view returns (string memory) {
return familyName;
}
function getGivenName() public view returns (string memory) {
return givenName;
}
function getMoney() public view returns (uint256) {
return money;
}
}
contract Son is Father {}
Son 컨트랙트가 상속을 받아 모두 받아 사용 가능함을 볼 수가 있음.
// SPDX-License-Identifier:GPL-30
pragma solidity >=0.7.0 <0.9.0;
contract Father {
string public familyName = "Lee";
string public givenName = "MinSang";
uint256 public money = 100;
constructor(string memory _givenName) {
givenName = _givenName;
}
function getFamilyName() public view returns (string memory) {
return familyName;
}
function getGivenName() public view returns (string memory) {
return givenName;
}
function getMoney() public view returns (uint256) {
return money;
}
}
위 생성자는 givenName을 변경시켜 줌.
Son이 Father의 것을 상속받는다 하여도, 이름은 다르기 때문에 생성자를 통해 이름을 다르게 지정할 수 있음.
// SPDX-License-Identifier:GPL-30
pragma solidity >=0.7.0 <0.9.0;
contract Father {
string public familyName = "Lee";
string public givenName = "MinSang";
uint256 public money = 100;
constructor(string memory _givenName) {
givenName = _givenName;
}
function getFamilyName() public view returns (string memory) {
return familyName;
}
function getGivenName() public view returns (string memory) {
return givenName;
}
function getMoney() public view returns (uint256) {
return money;
}
}
contract Son is Father("SeongHyun") {}
위 예제와 같이
상속받을컨트랙트 is 상속해주는컨트랙트(파라미터) {}