Was ist der Unterschied zwischen “extends” und “implements”?

Extends verwendet man für die Vererbung von Klassen. Leitet man eine Unterklasse B mit extends von der Oberklasse A ab, übernimmt die Klasse B alle nicht privaten Eigenschaften und Methoden von A. In der Unterklasse können zusätzliche Eigenschaften und Methoden implementiert werden.
In Java kann mit extends nur von einer Klasse geerbt werden.

Extends kann auch verwendet werden, um Interfaces zu erweitern.

Beispiel:

interface A {
    void m1();
}

interface B extends A {
    void m2();
}

class C implements B {

    @Override
    public void m1() {
        // TODO Auto-generated method stub
    }

    @Override
    public void m2() {
        // TODO Auto-generated method stub
    }
}

Das Interface B erweitert Interface A um die Methode m2(). Klasse C implementiert das Interface B, muss also die Methoden m1() und m2() implementieren.

Implements verwendet man für die Implementierung von Interfaces. Alle im Interface definierten Methoden müssen von der abgeleiteten Klasse implementiert werden, außer die abgeleitete Klasse ist mit dem Schlüsselwort abstract versehen. In diesem Fall müssen die Methoden nicht implementiert werden.
In Java kann mit implements von mehreren Interfaces geerbt werden.