// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
string public familyName = "Kim";
string public givenName = "Jung";
uint256 public money = 100;
constructor(string memory _givenName) public {
givenName = _givenName;
}
function getFamilyName() view public returns(string memory){
return familyName;
}
function getGivenName() view public returns(string memory){
return givenName;
}
function getMoney() view public returns(uint256){
return money;
}
}
contract Son is Father("James"){
}
지난번 강의 코드입니다.
저희는 getMoney 부분을 오버라이딩 해보겠습니다.
아들 컨트랙이 아버지 컨트랙에게 돈 100 만원을 상속받는다고 가정하였을때, 아들이 그 100만원을 저금하고, 아들이 일을하면 월급을 또 저금 함으로써 아들돈이 증가 할 수 있잖아요.
저희는 그 부분을 getMoney 부분을 오버라이딩 통해서 구현 해보겠습니다.
먼저 오버라이딩을 하기 위해서는, 오버라이딩할 함수에 virtual 을 명시해주어야합니다.
function getMoney() view public virtual returns(uint256){
return money;
}
위와 같이 아버지 컨트랙에 virtual 을 써줌으로써, 자식 컨트랙에서 오버라이딩을 할 것이다 라고 알려줘야합니다.
그러고 나서 Son 컨트랙에 들어가서,
contract Son is Father("James"){
uint256 public earning = 0;
function work() public {
earning += 100;
}
function getMoney() view public override returns(uint256){
return money+earning;
}
}
이런식으로 써줄수 있습니다.
일단!
getMoney만 중심으로 볼게요.
getMoney를 보면 override 를 볼 수 가있을거예요.
이 override를 명시함으로써 저희는 인제 getMoeny 의 함수를 오버라이딩 할 수 있게 된거예요.
즉, getMoney 안의 내용들을 저희 맘대로 바꿀수 있다는 것입니다.
안의 내용을 보면 기존의 getMoeny와 다른걸 알 수 있어요.
기존에는 return money 였지만, 저희는 Son 컨트랙에서 return money+earning; 변경해줬습니다.
즉 getMoeny가 오버라이딩 됬음을 알려주죠
자 그러면 earning 이라는 변수는 Son 컨트랙이 일을 하였을 때 벌어 들이는 수입입니다.
getMoeny 위를 보시면 work 이라는 함수가 보이는데 이 함수는 Son컨트랙이 일을 해서 돈을 번것을 나타 냅니다.
즉 work 함수를 돌리면 earning 100 씩 증가합니다.
그리고 getMoeny 를 누르면 아버지에게 받은돈 moeny 와 아들이 번돈 earning 이 합쳐져서 아들의 재산을 보여준답니다.
그래서 전체 코드는 이렇답니다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
string public familyName = "Kim";
string public givenName = "Jung";
uint256 public money = 100;
constructor(string memory _givenName) public {
givenName = _givenName;
}
function getFamilyName() view public returns(string memory){
return familyName;
}
function getGivenName() view public returns(string memory){
return givenName;
}
function getMoney() view public virtual returns(uint256){
return money;
}
}
contract Son is Father("James"){
uint256 public earning = 0;
function work() public {
earning += 100;
}
function getMoney() view public override returns(uint256){
return money+earning;
}
}