// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
}
contract Mother{
}
contract Son is Father,Mother{
}
이렇게 써줌으로써 저희는 Father, Mother 컨트랙이 Son 컨트랙에 상속됨을 볼 수 가 있습니다.
만약에, Father, Mother 컨트랙에 같은 이름의 함수가 있다면 어떻게 될까요?
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
uint256 public fatherMoney = 100;
function getFatherName() public pure returns(string memory){
return "KimJung";
}
function getMoney() public view returns(uint256){
return fatherMoney;
}
}
contract Mother{
uint256 public motherMoney = 500;
function getMotherName() public pure returns(string memory){
return "Leesol";
}
function getMoney() public view returns(uint256){
return motherMoney;
}
}
contract Son is Father, Mother {
}
먼저, Father 과 Mother 컨트랙 두개를 보면, 매우 유사합니다.
getFatherName 과 getMotherName 은 아버지와 어머니 이름을 리턴하는 함수입니다.
그리고, getMoeny라는 같은 이름의 함수가 Father , Mother 컨트랙에 각각 들어 있답니다.
이럴경우, Son 컨트랙이 Father과 Mother 컨트랙을 상속 받는다면 에러가 발생하고, override 하라고 명시하라고 에러가 뜹니다. 그렇기에, 저희는 이 똑같은 이름의 함수 getMoeny 를 가진 두개의 다른 Father, Mother 스마트컨트랙에, getMoeny 부분에 virtual 이라고 명시를 해줄것입니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
.....
function getMoney() public view virtual returns(uint256){
return fatherMoney;
}
}
contract Mother{
....
function getMoney() public view virtual returns(uint256){
return motherMoney;
}
}
contract Son is Father, Mother {
}
그러면 위와 같이 되겠죠.
그담에 Son 컨트랙에 override를 해주어야 하잖아요.
보통의 경우, 그냥 override만 명시를 해주었잖아요 이번에는 overrride (Father,Mother) 을 써줘야합니다.
즉 이런식으로 override ( 중복이름의 함수를 가진 스마트 컨트랙 명시) 해줘야합니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
uint256 public fatherMoney = 100;
function getFatherName() public pure returns(string memory){
return "KimJung";
}
function getMoney() public view virtual returns(uint256){
return fatherMoney;
}
}
contract Mother{
uint256 public motherMoney = 500;
function getMotherName() public pure returns(string memory){
return "Leesol";
}
function getMoney() public view virtual returns(uint256){
return motherMoney;
}
}
contract Son is Father, Mother {
function getMoney() public view override(Father,Mother) returns(uint256){
return fatherMoney+motherMoney;
}
}