You are viewing a single comment's thread from:

RE: Solidity开发指南

in #starnote3 days ago

当使用super时,调用的是继承的函数,不是它自己,比如下边给出的例子中,函数名字是相同的,要知道调用的不是它自己,是继承父合约中的同名函数。

contract C {
     uint public u;
     function f() public virtual{
       u = 1;
     }
}

contract B is C {
     function f() public override virtual{
       u = 2;
     }
}

contract A is B {
     function f() public override{  // will set u to 3
       u = 3;
     }
     function f1() public{ // will set u to 2
       //当使用super时,调用的是继承的该函数,不是它自己,比如下边给出的例子中,函数名字是相同的,要知道调用的不是它自己,是继承父合约中的同名函数。
       super.f();
     }
     function f2() public { // will set u to 2
       B.f();
     }
     function f3() public { // will set u to 1
       C.f();
     }
}