Virtual & Overwrite

In Solidity, the virtual and override keywords are used when working with inheritance and function overriding.

  • virtual keyword is used to declare a function that can be overridden in the child contract. When a function is declared as virtual, it means that it can be overridden by a function with the same signature in a child contract.

  • override keyword is used to indicate that a function is intended to override a virtual function in the parent contract. When a function is declared with the override keyword, it must have the exact same function signature as the function it is intended to override.


contract Parent {
    function foo() public virtual returns (uint) {
        return 10;

contract Child is Parent {
    function foo() public override returns (uint) {
        return 20;

In this example, the Parent contract declares a virtual function foo(). The Child contract inherits from the Parent contract and overrides the foo() function with its own implementation using the override keyword.

Last updated