Bird
Raised Fist0
Blockchain / Solidityprogramming~5 mins

Multiple inheritance in Blockchain / Solidity - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is multiple inheritance in programming?
Multiple inheritance is when a class can inherit features (methods and properties) from more than one parent class. It allows combining behaviors from different sources into one class.
Click to reveal answer
intermediate
How does multiple inheritance work in blockchain smart contracts?
In blockchain smart contracts (like Solidity), multiple inheritance lets a contract inherit functions and variables from multiple contracts. This helps reuse code and combine features from different contracts.
Click to reveal answer
intermediate
What is the 'diamond problem' in multiple inheritance?
The diamond problem happens when two parent classes inherit from the same grandparent class, and a child inherits from both parents. This can cause confusion about which grandparent's method to use.
Click to reveal answer
advanced
How does Solidity handle the diamond problem?
Solidity uses a rule called C3 Linearization to order parent contracts. This creates a clear order to call functions and avoids ambiguity in multiple inheritance.
Click to reveal answer
beginner
Give a simple example of multiple inheritance in Solidity.
contract A { function foo() public pure returns (string memory) { return "A"; } } contract B { function bar() public pure returns (string memory) { return "B"; } } contract C is A, B { } // Contract C inherits from both A and B.
Click to reveal answer
What does multiple inheritance allow a class or contract to do?
AInherit from more than one parent class or contract
BInherit from only one parent class
CPrevent inheritance from any class
DOnly inherit variables, not functions
What problem arises when two parent classes share the same grandparent in multiple inheritance?
AStack overflow
BSyntax error
CMemory leak
DDiamond problem
Which rule does Solidity use to solve the diamond problem?
ADepth-first search
BC3 Linearization
CBreadth-first search
DRandom ordering
In Solidity, how do you specify that a contract inherits from multiple contracts?
Acontract C is A, B { }
Bcontract C inherits A and B { }
Ccontract C extends A, B { }
Dcontract C from A, B { }
Why is multiple inheritance useful in blockchain smart contracts?
AIt makes contracts slower
BIt prevents code reuse
CIt allows combining features from different contracts
DIt disables function overriding
Explain multiple inheritance and why it is important in blockchain smart contracts.
Think about how contracts can share code from more than one source.
You got /4 concepts.
    Describe the diamond problem and how Solidity solves it.
    Focus on the problem of shared ancestors and the solution Solidity uses.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of multiple inheritance in blockchain smart contracts?

      easy
      A. To restrict a contract to inherit from only one contract
      B. To allow a contract to use code from more than one contract
      C. To make contracts run faster on the blockchain
      D. To prevent contracts from sharing any code

      Solution

      1. Step 1: Understand inheritance in contracts

        Inheritance allows a contract to reuse code from another contract.
      2. Step 2: Identify multiple inheritance meaning

        Multiple inheritance means inheriting from more than one contract to combine features.
      3. Final Answer:

        To allow a contract to use code from more than one contract -> Option B
      4. Quick Check:

        Multiple inheritance = use code from multiple contracts [OK]
      Hint: Multiple inheritance means using code from many contracts [OK]
      Common Mistakes:
      • Thinking multiple inheritance restricts to one contract
      • Confusing inheritance with contract speed
      • Believing inheritance prevents code sharing
      2.

      Which of the following is the correct syntax to inherit from two contracts A and B in Solidity?

      contract C is ? {}
      easy
      A. A + B
      B. A & B
      C. A | B
      D. A, B

      Solution

      1. Step 1: Recall Solidity inheritance syntax

        In Solidity, multiple inheritance uses commas to separate parent contracts.
      2. Step 2: Check the options

        Only A, B uses commas correctly: contract C is A, B {}.
      3. Final Answer:

        A, B -> Option D
      4. Quick Check:

        Use commas to list parents in Solidity inheritance [OK]
      Hint: Use commas to list multiple parents in Solidity [OK]
      Common Mistakes:
      • Using symbols like & or + instead of commas
      • Forgetting to separate parent contracts
      • Writing inheritance without any separator
      3.

      Consider the following Solidity contracts:

      contract A {
          function greet() public pure virtual returns (string memory) {
              return "Hello from A";
          }
      }
      
      contract B {
          function greet() public pure virtual returns (string memory) {
              return "Hello from B";
          }
      }
      
      contract C is A, B {
          function greet() public pure override(A, B) returns (string memory) {
              return super.greet();
          }
      }

      What will C().greet() return?

      medium
      A. "Hello from A"
      B. "Hello from C"
      C. Compilation error due to ambiguity
      D. "Hello from B"

      Solution

      1. Step 1: Understand method resolution order

        In Solidity, the order of inheritance matters. The first parent contract's function is called by super.
      2. Step 2: Check inheritance order and super call

        Contract C inherits A then B. Calling super.greet() calls A's greet due to C3 linearization order C, A, B.
      3. Final Answer:

        "Hello from A" -> Option A
      4. Quick Check:

        First parent function called by super = "Hello from A" [OK]
      Hint: In Solidity, super calls first inherited (leftmost) contract's method [OK]
      Common Mistakes:
      • Assuming super calls last parent
      • Expecting compilation error without override
      • Thinking super calls child's own method
      4.

      Given the contracts below, what is the error in contract C?

      contract A {
          function foo() public pure returns (string memory) {
              return "A";
          }
      }
      
      contract B {
          function foo() public pure returns (string memory) {
              return "B";
          }
      }
      
      contract C is A, B {
          // Missing override keyword
          function foo() public pure returns (string memory) {
              return super.foo();
          }
      }
      medium
      A. Missing override keyword causes compilation error
      B. super.foo() calls an undefined function
      C. No error, code compiles and runs fine
      D. Function foo() must be private

      Solution

      1. Step 1: Check function overriding rules

        When overriding functions from multiple parents, Solidity requires the override keyword.
      2. Step 2: Identify missing override keyword

        Contract C's foo lacks override(A, B), causing a compilation error.
      3. Final Answer:

        Missing override keyword causes compilation error -> Option A
      4. Quick Check:

        Override keyword required when overriding multiple parents [OK]
      Hint: Always add override keyword when overriding multiple parents [OK]
      Common Mistakes:
      • Forgetting override keyword in child function
      • Assuming super.foo() is undefined
      • Thinking function visibility must be private
      5.

      You have two contracts:

      contract Token {
          function transfer() public pure virtual returns (string memory) {
              return "Token transfer";
          }
      }
      
      contract Mintable {
          function transfer() public pure virtual returns (string memory) {
              return "Mintable transfer";
          }
      }
      
      contract MyToken is Token, Mintable {
          function transfer() public pure override(Token, Mintable) returns (string memory) {
              return string.concat(Token.transfer(), " & ", Mintable.transfer());
          }
      }

      What will MyToken().transfer() return?

      hard
      A. "Mintable transfer & Token transfer"
      B. Compilation error due to ambiguous override
      C. "Token transfer & Mintable transfer"
      D. "Token transfer"

      Solution

      1. Step 1: Understand explicit calls to parent functions

        MyToken's transfer calls both Token.transfer() and Mintable.transfer() explicitly.
      2. Step 2: Check string concatenation order

        The returned string concatenates Token.transfer() first, then Mintable.transfer() with " & " in between.
      3. Final Answer:

        "Token transfer & Mintable transfer" -> Option C
      4. Quick Check:

        Explicit calls combine both parents' transfer strings [OK]
      Hint: Explicitly call each parent to combine their outputs [OK]
      Common Mistakes:
      • Assuming super calls only one parent
      • Expecting compilation error without override
      • Mixing order of concatenation
      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