The problem with subclassing is that while it starts out with great intentions, eventually things get a lot messier as exceptions arise. This often leads to a brittle design.
Without polymorphism in strongly typed languages code becomes tightly coupled and duplication increases.
- Excerpt From: The Pragmatic Bookshelf. “PragPub 2016-09: Issue #87.” The Pragmatic Bookshelf, LLC, 2016-09-01. iBooks.