Inheritance lets one class take another's fields and behaviour as a starting point, then add to them or replace parts. It gives two things at once: code reuse, and a subtype relationship, so a dog can be passed anywhere an animal is expected. The second is the part that matters.
Textbooks name the shapes by how the arrows point:
Single: one class extends one parent.
Multilevel: a chain, where a child is itself a parent to something else.
Hierarchical: several classes extend the same parent.
Multiple: one class extends more than one parent, which most languages allow for interfaces but not classes.
The split worth remembering is implementation inheritance versus interface inheritance. Taking a parent's code ties you to its internals, so its next change can break you. Taking only its contract does not. Every subclass is also a standing promise to keep behaving like the parent, which is easy to make and hard to keep.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.