Code Smell 290 – Refused Bequest

Subclasses should honor ALL their parent’s contract.


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri

When you ignore your inheritance, you will have trouble with your parents

TL;DR: Subclasses should honor ALL their parent’s contract.

Problems 😔

Solutions 😃

  1. Favor composition over inheritance
  2. Don't subclassify for code reuse
  3. Rethink hierarchy
  4. Extract shared logic
  5. Use interfaces
  6. Remove dead code

Refactorings ⚙️

Refactoring 007 - Extract Class

Context 💬

When you create a subclass, it should use or extend the behavior of its parent.

\ If it ignores or overrides most of it, you probably force inheritance where it doesn’t belong to reuse code.

\ This makes the code misleading and hard to maintain.

Sample Code 📖

Wrong 🚫

class House {
  constructor(address) {
    this.address = address;
  }
  address() {
    return this.address;
  }
  openDoor() {
    console.log("Door opened at " + this.address);
  }
}

class Motorhome extends House {
  constructor() {
    super(null);
  }
  address() {
    return null;
    // This implementation is the same as the parent's
    // and is also a refused bequest
  }
  openDoor() {
    console.log("Motorhome door opened.");
  }
}
class House {
  constructor(address) {
    this.address = address;
  }
  address() {
    return this.address;
  }
  openDoor() {
    console.log("Door opened at " + this.address);
  }
}

class Motorhome {
  // does not inherit from House
  constructor(gps) {
    this.gps = gps;
  }
  openDoor() {
    console.log("Motorhome door opened at " + this.gps.getLocation());
  }
}

Detection 🔍

  • [x] Manual

Look for subclasses that override or ignore most of their parent’s behavior.

\ You should reconsider the inheritance if a subclass sets parent properties to null or reimplements core methods.

Tags 🏷️

  • Inheritance

Level 🔋

  • [x] Intermediate

Why the Bijection Is Important 🗺️

Your software should reflect real-world relationships.

\ When you force a subclass that doesn’t logically extend its parent in the Bijection, you mislead developers and introduce maintenance problems.

AI Generation 🤖

AI can generate this smell when it defaults to inheritance for reuse instead of composition.

\ This happens when AI follows generic templates without understanding the context.

AI Detection 🥃

AI can detect this smell by analyzing class structures and inheritance trees. However, it struggles with subtle cases where inheritance initially seems valid but breaks expectations.

Try Them! 🛠

Remember: AI Assistants make lots of mistakes

| Without Proper Instructions | With Specific Instructions | |----|----| | ChatGPT | ChatGPT | | Claude | Claude | | Perplexity | Perplexity | | Copilot | Copilot | | Gemini | Gemini | | DeepSeek | DeepSeek | | Meta AI | Meta AI |

Conclusion ✔️

When you design a class hierarchy, you need to make sure that subclasses logically inherit from their parent.

\ If a subclass refuses some of the behavior, you should rethink your design.

Relations 👩‍❤️‍💋‍👨

Code Smell 11 - Subclassification for Code Reuse

Code Smell 58 - Yo-yo Problem

Code Smell 43 - Concrete Classes Subclassified

More Information 📕

Refactoring Guru

Code Smells

Disclaimer 📘

Code Smells are my opinion.

Credits 🙏

Photo by Hanson Lu on Unsplash


Favor object composition over class inheritance.

Erich Gamma

Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code


\


This content originally appeared on HackerNoon and was authored by Maximiliano Contieri


Print Share Comment Cite Upload Translate Updates
APA

Maximiliano Contieri | Sciencx (2025-02-12T22:58:21+00:00) Code Smell 290 – Refused Bequest. Retrieved from https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/

MLA
" » Code Smell 290 – Refused Bequest." Maximiliano Contieri | Sciencx - Wednesday February 12, 2025, https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/
HARVARD
Maximiliano Contieri | Sciencx Wednesday February 12, 2025 » Code Smell 290 – Refused Bequest., viewed ,<https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/>
VANCOUVER
Maximiliano Contieri | Sciencx - » Code Smell 290 – Refused Bequest. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/
CHICAGO
" » Code Smell 290 – Refused Bequest." Maximiliano Contieri | Sciencx - Accessed . https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/
IEEE
" » Code Smell 290 – Refused Bequest." Maximiliano Contieri | Sciencx [Online]. Available: https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/. [Accessed: ]
rf:citation
» Code Smell 290 – Refused Bequest | Maximiliano Contieri | Sciencx | https://www.scien.cx/2025/02/12/code-smell-290-refused-bequest/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.