title: What is the purpose of abstract classes in Java?
body: <p>I have some questions around <strong>abstract classes</strong> and their use. I know the basics about them; for example, that they can't be instantiated, they can have concrete and abstract methods, ... But I guess what I wanna know is, <strong>what purpose do they serve in life (in software engineering)?</strong> </p>
  
  <p>What is the purpose of abstract classes in Java? 
  Why and when should one use an Abstract class? If you can use a normal class and then inherit it, why would you inherit an abstract class?
  How would using abstract classes make our life easier? would it provide better maintainability? more flexibility? ...</p>
  
  <p>btw, I've already looked at some similar questions and answers, including <a href="https://stackoverflow.com/questions/9197521/understanding-the-purpose-of-abstract-classes-in-java">Understanding the purpose of Abstract Classes in Java</a>, but they don't answer my question. I'm more looking for answers that shed light on the philosophy behind the introduction of abstract classes in the first place in Java.</p>
  
  <p>Thanks </p>