: They have names and aren't required to create a new object every time.
: Inheritance breaks encapsulation; use wrappers or delegates instead. : They have names and aren't required to
: Use this when constructors have many parameters (especially optional ones). : They have names and aren't required to
: Don't use them for normal control flow. : They have names and aren't required to
: Implement it for any class with a natural ordering. 3. Classes and Interfaces
: Always override them together. If you break this, HashMap and HashSet will fail.
: Interfaces allow for flexible, "mixin" type behavior. 4. Generics and Enums