here is one os the ways how I learned about
imagine this scenario
abstract class Plane {
public function openDoors();
}
interface Fliers {
public function fly();
}
now lets use them
class Boing474 extends Plane implements Fliers {
public function fly() {
// some stuff
}
public function openDoors() {
// do something
}
}
and
class Tweety implements Fliers{
public function fly() {
// some stuff
}
}
Boing747 is Plane that can fly and Tweety is bird than can fly but make no sense "openDoors". The point is that interfaces can be implemented by different kind of objects but classes can not. as you see Boing747 and Tweety hasn't nothing in common but both can fly.