Bird
Raised Fist0
Rubyprogramming~10 mins

Inherited hook in Ruby - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Inherited hook
Define Base Class with inherited hook
↓
Create Subclass of Base
↓
Ruby calls inherited hook
↓
Execute inherited method code
↓
Subclass modified or logged
↓
Subclass ready with inherited behavior
When a subclass is created, Ruby automatically calls the inherited hook method in the parent class, allowing custom code to run at that moment.
Execution Sample
Ruby
class Base
  def self.inherited(subclass)
    puts "Inherited by #{subclass}"
  end
end

class Child < Base; end
Defines a base class with an inherited hook that prints a message when a subclass is created.
Execution Table
StepActionEvaluationOutput
1Define Base class with inherited methodBase class created
2Define inherited hook methodMethod stored in Base
3Define Child subclass < BaseRuby calls Base.inherited(Child)Inherited by Child
4Child class createdChild class ready
💡 Subclass Child created, inherited hook executed once
Variable Tracker
VariableStartAfter Step 3Final
BaseClass definedClass definedClass defined
ChildNot definedDefined as subclass of BaseDefined as subclass of Base
Key Moments - 2 Insights
Why does the inherited method run when I define a subclass?
Ruby automatically calls the inherited method on the parent class when a subclass is created, as shown in execution_table step 3.
Can I modify the subclass inside the inherited method?
Yes, the inherited method receives the subclass as an argument, so you can add methods or variables to it during execution (see step 3 output).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is printed when the Child class is defined?
ANo output
B"Child inherits Base"
C"Inherited by Child"
D"Base inherited by Child"
💡 Hint
Check execution_table row 3 under Output column
At which step does Ruby call the inherited hook?
AStep 2
BStep 3
CStep 1
DStep 4
💡 Hint
Look at execution_table Step column and Action describing inherited call
If you add code inside inherited to add a method to subclass, when will that method be available?
ARight after subclass is created
BBefore subclass is defined
COnly after subclass is instantiated
DNever
💡 Hint
Inherited hook runs during subclass creation (see execution_table step 3)
Concept Snapshot
Inherited hook in Ruby:
- Define self.inherited(subclass) in parent class
- Runs automatically when subclass is created
- Receives subclass as argument
- Use to modify or track subclasses
- Useful for metaprogramming and callbacks
Full Transcript
This example shows how Ruby's inherited hook works. When the Base class defines self.inherited, Ruby calls this method automatically whenever a new subclass is created. In the example, when Child < Base is defined, Ruby calls Base.inherited(Child), which prints "Inherited by Child". This lets you run code right when subclasses appear, such as adding methods or logging. The execution table traces each step: defining Base, defining the inherited method, creating Child which triggers the hook, and finishing subclass creation. Variables track class definitions before and after subclassing. Common confusions include why the inherited method runs automatically and how you can modify the subclass inside it. The quiz checks understanding of when the hook runs and what output it produces. The snapshot summarizes the key points for quick recall.

Practice

(1/5)
1. What does the inherited hook method do in Ruby?
easy
A. It is called automatically when a subclass is created.
B. It runs when an instance of a class is created.
C. It is used to define class variables.
D. It is called when a method is overridden.

Solution

  1. Step 1: Understand the purpose of inherited

    The inherited method is a special hook in Ruby that triggers when a subclass is created from a parent class.
  2. Step 2: Differentiate from other hooks

    It is not related to instance creation, method overriding, or variable definition, but specifically to subclass creation.
  3. Final Answer:

    It is called automatically when a subclass is created. -> Option A
  4. Quick Check:

    Inherited hook = called on subclass creation [OK]
Hint: Inherited hook triggers only on subclass creation [OK]
Common Mistakes:
  • Confusing inherited with initialize method
  • Thinking it runs on instance creation
  • Mixing it with method override hooks
2. Which of the following is the correct way to define an inherited hook in a Ruby class?
easy
A. def self.inherited; puts "New subclass created"; end
B. def inherited(self); puts "New subclass created"; end
C. def inherited(subclass); puts "New subclass created"; end
D. def self.inherited(subclass); puts "New subclass created"; end

Solution

  1. Step 1: Recognize the method signature

    The inherited hook must be defined as a class method, so it needs self.inherited and takes one argument: the subclass.
  2. Step 2: Check method parameters and syntax

    def self.inherited(subclass); puts "New subclass created"; end correctly defines the class method with the subclass parameter. Incorrect versions lack self. (instance method), omit the subclass parameter, or use wrong parameters like self.
  3. Final Answer:

    def self.inherited(subclass); puts "New subclass created"; end -> Option D
  4. Quick Check:

    Class method with subclass param = def self.inherited(subclass); puts "New subclass created"; end [OK]
Hint: Inherited hook is a class method with subclass param [OK]
Common Mistakes:
  • Defining inherited as instance method
  • Omitting the subclass parameter
  • Forgetting self. for class method
3. What will be the output of this Ruby code?
class Parent
  def self.inherited(subclass)
    puts "Subclass: #{subclass}"
  end
end

class Child < Parent
end
medium
A. No output
B. Subclass: Child
C. Subclass: Parent
D. SyntaxError

Solution

  1. Step 1: Understand when inherited runs

    The inherited method in Parent runs automatically when a subclass is created.
  2. Step 2: Identify subclass creation

    When Child < Parent is declared, Parent.inherited(Child) is called, printing "Subclass: Child".
  3. Final Answer:

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

    Subclass creation triggers inherited hook output [OK]
Hint: Inherited prints subclass name on subclass creation [OK]
Common Mistakes:
  • Expecting output on instance creation
  • Confusing subclass with parent class name
  • Thinking no output occurs
4. Identify the error in this Ruby code using the inherited hook:
class Base
  def inherited(subclass)
    puts "Subclass created: #{subclass}"
  end
end

class Derived < Base
end
medium
A. The inherited method should be a class method with self.
B. The subclass parameter is missing.
C. The puts statement syntax is incorrect.
D. Derived class should not inherit from Base.

Solution

  1. Step 1: Check method definition context

    The inherited hook must be a class method, so it requires def self.inherited(subclass).
  2. Step 2: Identify the error in the code

    Here, inherited is defined as an instance method, missing self., so it won't be called on subclass creation.
  3. Final Answer:

    The inherited method should be a class method with self. -> Option A
  4. Quick Check:

    Inherited hook must be class method [OK]
Hint: Inherited must be defined with self. to work [OK]
Common Mistakes:
  • Defining inherited as instance method
  • Omitting self. in method definition
  • Misunderstanding inherited hook usage
5. How can you use the inherited hook to automatically add a class variable @@subclasses that tracks all subclasses of a parent class?
hard
A. Use initialize method to track subclasses in @@subclasses.
B. Define an instance method inherited to add subclass to @@subclasses.
C. Define self.inherited(subclass) to append subclass to @@subclasses array.
D. Manually add subclasses to @@subclasses outside the class.

Solution

  1. Step 1: Understand subclass tracking

    To track subclasses, use a class variable @@subclasses initialized as an array in the parent class.
  2. Step 2: Use inherited hook to update tracking

    Define self.inherited(subclass) to append the new subclass to @@subclasses automatically when a subclass is created.
  3. Final Answer:

    Define self.inherited(subclass) to append subclass to @@subclasses array. -> Option C
  4. Quick Check:

    Inherited hook + class variable tracks subclasses [OK]
Hint: Use inherited hook to update subclass list automatically [OK]
Common Mistakes:
  • Using instance methods to track subclasses
  • Tracking subclasses in initialize method
  • Forgetting to initialize @@subclasses as array
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