안녕하세요.
지난 시간에 저희는 super를 통해서 상속을 다뤄 보았습니다.
만약에 저희가 두개 이상의 스마트 컨트랙을 상속 받고, 그 두개 이상의 스마트 컨트랙에는 똑같은 함수가 있다고 가정 하였을때, 저희가 super를 쓴다면 어떤 스마트 컨트랙의 함수를 상속 받을까요?
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father {
event FatherName(string name);
function who() public virtual{
emit FatherName("KimDaeho");
}
}
contract Mother {
event MotherName(string name);
function who() public virtual{
emit MotherName("leeSol");
}
}
contract Son is Father, Mother{
function who() public override(Father,Mother){
super.who();
}
}
현재 저희는 Father 와 Mother 스마트 컨트랙이 있어요.
그리고, 그둘은 who라는 똑같은 함수가 있고요.
그안에는, 각자 자신의 이름을 말해주는 이벤트가 있습니다.
자 그럼 인제 Son 이라는 스마트컨트랙은 Father 와 Mother를 상속 받습니다.
who 함수에 오버라이딩을 하여서, super.who() 를 해주었어요.
그러면 여기서 Father 와 Mother 누구의 것이 상속이 될까요?
정답은 Mother의 것이 상속되어서 leeSol 이 반환됩니다.
왜 Father 이 아니라 Mother 인걸까요?
정답은 Son is Father , Mother 이기 때문입니다. 즉 Mother 두번째 (최신) 으로 상속 받았기에 그렇습니다.
반대로 Son is Mother, Fother 이였다면 KimDaeHo 가 반환이 되었겠죠.