상세 컨텐츠

본문 제목

솔리디티 강좌 16강 상속 5 - 상속의 순서

솔리디티 깨부수기 - 기본

by D_One 2021. 9. 15. 11:53

본문

 

안녕하세요.

 

지난 시간에 저희는 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 가  반환이 되었겠죠.

 

 

관련글 더보기