Inheritance using classes in Javascript - Time & Space Complexity
When using inheritance with classes, we want to know how the program's work grows as we create more objects or call methods.
We ask: How does the time to run change when we use inherited methods or create many instances?
Analyze the time complexity of the following code snippet.
class Animal {
speak() {
console.log('Animal speaks');
}
}
class Dog extends Animal {
speak() {
super.speak();
console.log('Dog barks');
}
}
const dog = new Dog();
dog.speak();
This code shows a Dog class inheriting from Animal and calling the parent method before adding its own behavior.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Calling the
speakmethod on the Dog instance. - How many times: Once per call; no loops or recursion inside the methods.
Each time we call speak, it runs a fixed number of steps: one call to the parent method and one extra log.
| Input Size (n) | Approx. Operations |
|---|---|
| 1 | 2 (one parent call + one child log) |
| 10 | 20 (10 calls x 2 operations each) |
| 100 | 200 (100 calls x 2 operations each) |
Pattern observation: The work grows directly with how many times we call the method, staying simple and linear.
Time Complexity: O(n)
This means the time grows in a straight line with the number of method calls; each call takes a fixed amount of work.
[X] Wrong: "Inheritance makes method calls slower exponentially because of chaining."
[OK] Correct: Each inherited method call adds only a fixed small number of steps, so time grows linearly, not exponentially.
Understanding how inheritance affects time helps you explain code efficiency clearly and shows you know how objects work behind the scenes.
"What if the speak method called itself recursively? How would the time complexity change?"
Practice
What does the extends keyword do in JavaScript classes?
Solution
Step 1: Understand the role of
Theextendsextendskeyword is used to create a child class that inherits from a parent class.Step 2: Identify inheritance behavior
This means the child class gets all properties and methods of the parent class automatically.Final Answer:
It makes one class inherit properties and methods from another class. -> Option AQuick Check:
extendsmeans inheritance [OK]
- Confusing extends with creating instances
- Thinking extends deletes classes
- Mixing extends with private methods
Which of the following is the correct syntax to create a child class Dog that inherits from a parent class Animal?
?Solution
Step 1: Recall JavaScript inheritance syntax
JavaScript usesclass Child extends Parent {}to inherit.Step 2: Match syntax to options
Only class Dog extends Animal {} matches the correct syntax:class Dog extends Animal {}.Final Answer:
class Dog extends Animal {} -> Option AQuick Check:
Correct syntax usesextends[OK]
- Using 'inherits' instead of 'extends'
- Using ':' like other languages
- Wrong order of keywords
What will be the output of this code?
class Animal {
speak() {
return "Animal sound";
}
}
class Dog extends Animal {
speak() {
return "Bark";
}
}
const pet = new Dog();
console.log(pet.speak());Solution
Step 1: Understand method overriding in child class
TheDogclass overrides thespeakmethod fromAnimalto return "Bark".Step 2: Check which method is called
Whenpet.speak()is called, it uses theDogversion, so it returns "Bark".Final Answer:
"Bark" -> Option CQuick Check:
Child method overrides parent method [OK]
- Expecting parent method output
- Thinking both methods run
- Confusing method names
Find the error in this code and choose the fix:
class Animal {
constructor(name) {
this.name = name;
}
}
class Dog extends Animal {
constructor(name) {
this.name = name;
}
}Solution
Step 1: Identify constructor error in child class
In JavaScript, a child class constructor must callsuper()before usingthis.Step 2: Fix by calling
Addingsuper(name);super(name);as the first line in Dog's constructor calls the parent constructor properly.Final Answer:
Addsuper(name);as the first line in Dog's constructor. -> Option BQuick Check:
Callsuper()beforethisin child constructor [OK]
- Using this before super()
- Forgetting to call super()
- Trying to access super.name directly
Given these classes, what will console.log(cat.describe()); print?
class Animal {
constructor(name) {
this.name = name;
}
describe() {
return `This is an animal named ${this.name}`;
}
}
class Cat extends Animal {
constructor(name, color) {
super(name);
this.color = color;
}
describe() {
return `${super.describe()} and its color is ${this.color}`;
}
}
const cat = new Cat("Whiskers", "black");
console.log(cat.describe());Solution
Step 1: Understand super method call in child
TheCatclass callssuper.describe()to get the parent description.Step 2: Combine parent and child descriptions
The child adds its color info, so the full string is "This is an animal named Whiskers and its color is black".Final Answer:
"This is an animal named Whiskers and its color is black" -> Option DQuick Check:
super.method() adds parent info in child method [OK]
- Ignoring super.describe() call
- Expecting only child or parent text
- Thinking super.describe is undefined
Ready to prove it?
Pass the test and this pattern moves unknown
