I'm not sure how many of you are like me, use implementation (class) inheritance (not interface inheritance, this one is OK) without too much thinking, with the intention of primarily for code reuse.
Inheritance for extension is Ok, but for code reuse? Maybe not that good.
Although I have achieved code reuse with class inheritance, but from time to time I feel unwanted class coupling were introduced too.
It doesn't sound right and today I have spend many hours reading through aquite amount of discussions through stackoverflow, StackExchance, wikipedia, and so on, many articles seem to prove my feeling, for example:
https://codeburst.io/inheritance-is-evil-stop-using-it-6c4f1caf5117 (especially this one)
https://www.artima.com/lejava/articles/designprinciples4.html
https://softwareengineering.stackexchange.com/a/65180/37358
Update 1: Let me quote from StackExchange user Stephen Bailey which is really well said:
My conclusion
===
If it's only about code resue, most of the case we should consider use composition instead of implementation inheritance, like assembling a car with various more fine-grained, more manageable components.
What do you think?