What role do abstract classes play in inheritance?
How can inheritance violate the Liskov Substitution Principle?
When is inheritance a good fit?
Why does using 'final' in inheritance change runtime behavior?
How does Java handle multiple inheritance with interfaces?
When should you consider composition over inheritance?
Why does interfaces in polymorphism matter in this design?