On IRC, a few other individuals and I have been a bit confuzzled by how to properly apply these two items in our code.
I believe the main issue is that NO ONE really understands the fundamental difference and purpose.
After reading the docs, I found them to be both circular in definition (EXAMPLE - quickly: having the attribute of being quick) and more importantly, use an almost convoluted degree of industry terminology. Now I don't consider myself an amateur and get most of these fundamental concepts and patterns, but the underlying issue is I have no bloody idea how they are intended to be used and how to apply them.
What I think would help the most is this: Please give a real-world use-case and (more importantly) an analogy to real-world objects so that people trying to learn Angular can understand.
By analogy I mean take the concept of patterns and code completely out of the equation. EXAMPLE:
Abstract class is like the word 'shape'. You can't simply use a shape, you need to specify exactly what kind of shape you are making in order to understand how it will behave. Extending an abstract class is like how a 'square' falls under the classification of 'shape' but you can specify dimension of a square and how it will behave, such as rolling. You CAN however determine general information, such as how many shapes are on the piece of paper, or that every shape can have a color.
Sorry I realize that's long, but I really think this is a very lacking and a lot of people have been asking these very questions.