기능들만 물려주는 것이지 속 내용까지 물려주는 것이 아니다. 기능 제공용으로만 사용되는 경우가 많다.
-> 상속 받은 것은 상속해주는 것을 바꿀 수 없다!
IS
뒤에 마지막으로 선언된 컨트랙트가 모든 것을 오버라이드한다.
override(//오버라이드할 함수를 적는다)
function who() override(DAD,MOM) public pure returns (string memory) {
return
}
위에 있는 것을 뜻하는 것
virtual-override를 빼고 super만 사용해도 된다
덮어쓰기용으로 제공되는 함수
덮어쓰는 함수에 override와 함께 사용된다
컨트랙트 안
오로지 컨트랙트 안에서만 접근할 수 있다.
상속된 컨트랙트에서 사용할 수 없다.
컨트랙트 밖 ex) 실행하는 위치
상속된 컨트랙트에서 사용할 수 없다.
internal 함수를 절대 건드리면 안된다
같은 컨트랙트 내에서는 상태변수의 visibility는 상관이 없다. 컨트랙트 내에서는 다 접근 가능하다. 외부에서 접근하는 시점부터 적용이 된다.
상태변수는 slot 으로 구분된다. 자리와 이름으로 위치가 지정된다.
컨트랙트 주소는 결정론적이다!!
만든사람 주소 + 논스 + 코드
새로고침했을 때 논스값이 0이다.
같은 지갑 주소에 논스값에 코드를 배포를 하면 스마트컨트랙트 주소가 동일하다.
원지갑주소에서 A를 변수를 보려면
컨트랙트 어드레스도 체인에 기록된다
상태변수도 체인에 기록된다
function setHusband(address _a) public { DAD husband = new DAD(); }
- 선언과 동시에 주소를 생성할 때
function setHusband(address _a) public { husband = DAD(_a); }
- 컨트랙트를 이미 생성한 후에 주소만 불러올 때
web3.js 를 사용하면 특정 컨트랙트에 있는 함수와 상태 변수를 가져올 수 있다.
현재: DAD(address)
잘 사용할 줄 알면 필요한 상태변수를 가져와서 간단한 버전 또는 응용버전을 만들 수 있다.