You are viewing a single comment's thread from:

RE: Solidity开发指南

in #starnote3 days ago

抽象合约可以实现类似多态的功能。一个抽象合约被多个合约继承,对其方法可以有不同的实现,具体参看合约详情。
注意:两个合约间只是方法的实现,不会相互改变状态变量等。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

abstract contract AbstractContract {
    function add(uint m, uint n) public virtual returns(uint);
    function mul(uint m, uint n) public pure returns(uint) {
        return m * n;
    }
}

contract MyContract is AbstractContract {
    function add(uint m, uint n) public override returns(uint) {
        return m + n;
    }
}
contract MyContract2 is AbstractContract {
    function add(uint m, uint n) public override returns(uint) {
        return (m + n) * 2;
    }
}
contract NewContract {
    AbstractContract c = new MyContract2();
    //合约的实例化以实现不同合约中的方法
    function calc(uint m, uint n) public returns(uint) {
        return c.add(m,n) + c.mul(m,n);
    }
}