This question already has an answer here:
An interface requires implementation of the specified functions in a class that implements the interface.
An abstract function from an abstract class requires implementation in a class that extends the abstract class.
They are essentially the same things, and I don't really see the difference. I've had a look at similar questions, and the answers still don't make much sense.
Can someone explain all the differences in-depth, and practical examples of when you would use either?