# S.O.L.I.D Principles (java examples)

* **Single responsibility principle** - A class should have only one reason to change.

* **Open/Closed principle - Software** entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

* **Liskov Substitution Principle** - Child classes should never break the parent class type definitions.

* **Interface Segregation Principle** - No client should be forced to depend on methods it does not use.

* **Dependency inversion principle** - High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.