Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

Contract inheritance in Blockchain / Solidity - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a contract that inherits from another contract.

Blockchain / Solidity
contract Base {
    uint public value;
}

contract Derived is [1] {
}
Drag options to blanks, or click blank then click option'
AContract
BDerived
CBase
DValue
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong contract name after is.
Forgetting to use the is keyword.
2fill in blank
medium

Complete the code to call the base contract constructor with a value.

Blockchain / Solidity
contract Base {
    uint public value;
    constructor(uint _value) {
        value = _value;
    }
}

contract Derived is Base {
    constructor() Base([1]) {}
}
Drag options to blanks, or click blank then click option'
A10
Bvalue
CBase
D_value
Attempts:
3 left
💡 Hint
Common Mistakes
Passing a variable name instead of a value.
Not calling the base constructor at all.
3fill in blank
hard

Fix the error in the code by completing the inheritance syntax correctly.

Blockchain / Solidity
contract A {
    function greet() public pure returns (string memory) {
        return "Hello from A";
    }
}

contract B [1] A {
}
Drag options to blanks, or click blank then click option'
Ais
Bextends
Cimplements
Dinherits
Attempts:
3 left
💡 Hint
Common Mistakes
Using extends or inherits which are not valid in Solidity.
Forgetting the keyword entirely.
4fill in blank
hard

Fill both blanks to override a function from the base contract in the derived contract.

Blockchain / Solidity
contract Base {
    function greet() public pure virtual returns (string memory) {
        return "Hello from Base";
    }
}

contract Derived is Base {
    function greet() public pure override returns (string memory) {
        return [1];
    }
}

// Use the function to get the greeting message
// string memory message = [2];
Drag options to blanks, or click blank then click option'
A"Hello from Derived"
B"Hello from Base"
CDerived().greet()
DBase().greet()
Attempts:
3 left
💡 Hint
Common Mistakes
Returning the base message instead of the new one.
Calling the base contract's function instead of the derived one.
5fill in blank
hard

Fill all three blanks to create a contract that inherits from two contracts and calls both base constructors.

Blockchain / Solidity
contract A {
    uint public a;
    constructor(uint _a) {
        a = _a;
    }
}

contract B {
    uint public b;
    constructor(uint _b) {
        b = _b;
    }
}

contract C is [1], [2] {
    constructor() A(1) [3](2) {}
}
Drag options to blanks, or click blank then click option'
AA
BB
CA()
DB()
Attempts:
3 left
💡 Hint
Common Mistakes
Not listing both base contracts in inheritance.
Not calling both base constructors properly.

Practice

(1/5)
1. What keyword is used in Solidity to inherit from a parent contract?
easy
A. extends
B. inherits
C. is
D. implements

Solution

  1. Step 1: Understand Solidity inheritance syntax

    In Solidity, the keyword is is used to inherit from a parent contract.
  2. Step 2: Compare with other options

    Keywords like extends, inherits, and implements are not used in Solidity for inheritance.
  3. Final Answer:

    is -> Option C
  4. Quick Check:

    Inheritance keyword = is [OK]
Hint: Remember: Solidity uses 'is' for inheritance [OK]
Common Mistakes:
  • Confusing Solidity with other languages like Java using 'extends'
  • Using 'implements' which is for interfaces
  • Trying 'inherits' which is not a Solidity keyword
2. Which of the following is the correct way to declare a function in a parent contract that can be overridden in Solidity?
easy
A. function foo() public virtual {}
B. function foo() public abstract {}
C. function foo() public override {}
D. function foo() public final {}

Solution

  1. Step 1: Identify the keyword to allow overriding

    In Solidity, to allow a function to be overridden in child contracts, it must be marked virtual.
  2. Step 2: Check other options for correctness

    override is used in child contracts, abstract is for abstract contracts, and final is not a Solidity keyword.
  3. Final Answer:

    function foo() public virtual {} -> Option A
  4. Quick Check:

    Allow override = virtual [OK]
Hint: Use 'virtual' in parent to allow overrides [OK]
Common Mistakes:
  • Using 'override' in parent instead of child
  • Confusing 'abstract' with 'virtual'
  • Using non-existent 'final' keyword
3. What will be the output of the following Solidity code when calling greet() on contract Child?
contract Parent {
    function greet() public virtual returns (string memory) {
        return "Hello from Parent";
    }
}

contract Child is Parent {
    function greet() public override returns (string memory) {
        return "Hello from Child";
    }
}
medium
A. Runtime error
B. "Hello from Parent"
C. Compilation error due to missing override
D. "Hello from Child"

Solution

  1. Step 1: Understand function overriding

    The Child contract overrides the greet() function from Parent using override keyword.
  2. Step 2: Determine which function runs on Child

    Calling greet() on Child runs the overridden function returning "Hello from Child".
  3. Final Answer:

    "Hello from Child" -> Option D
  4. Quick Check:

    Override function output = "Hello from Child" [OK]
Hint: Child's override function runs, not parent's [OK]
Common Mistakes:
  • Thinking parent function runs instead of child
  • Missing 'override' keyword causing compile error
  • Expecting runtime error without cause
4. Identify the error in the following Solidity code snippet:
contract Base {
    function foo() public virtual returns (string memory) {
        return "Base";
    }
}

contract Derived is Base {
    function foo() public returns (string memory) {
        return "Derived";
    }
}
medium
A. Missing 'override' keyword in Derived's foo function
B. Missing 'virtual' keyword in Base's foo function
C. Derived contract should not inherit Base
D. Function foo should be private

Solution

  1. Step 1: Check overriding rules in Solidity

    When overriding a function marked virtual in the parent, the child function must use override keyword.
  2. Step 2: Identify missing keyword

    The foo() function in Derived lacks the override keyword, causing a compilation error.
  3. Final Answer:

    Missing 'override' keyword in Derived's foo function -> Option A
  4. Quick Check:

    Override missing = compile error [OK]
Hint: Override functions must use 'override' keyword [OK]
Common Mistakes:
  • Forgetting 'override' keyword in child function
  • Thinking 'virtual' is needed in child function
  • Assuming inheritance itself causes error
5. Given the following contracts, what will be the output of calling getMessage() on contract GrandChild?
contract Parent {
    function getMessage() public virtual returns (string memory) {
        return "Parent";
    }
}

contract Child is Parent {
    function getMessage() public virtual override returns (string memory) {
        return "Child";
    }
}

contract GrandChild is Child {
    function getMessage() public override returns (string memory) {
        return super.getMessage();
    }
}
hard
A. "Parent"
B. "Child"
C. "GrandChild"
D. Compilation error due to missing virtual

Solution

  1. Step 1: Understand super keyword in Solidity inheritance

    The GrandChild contract calls super.getMessage(), which refers to the immediate parent Child implementation.
  2. Step 2: Identify which function runs

    The Child contract's getMessage() returns "Child", so GrandChild returns "Child" as well.
  3. Final Answer:

    "Child" -> Option B
  4. Quick Check:

    super calls immediate parent = "Child" [OK]
Hint: super calls immediate parent function [OK]
Common Mistakes:
  • Thinking super calls grandparent function
  • Expecting 'GrandChild' string without override
  • Missing 'virtual' in intermediate contract causing error
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard