Also ich versuche mal alles kompakt zu erläutern:
Klassen:
Klassen sind Baupläne für Objekte. Quasi wenn du ein Auto bauen willst, was das Auto ausmacht und kennzeichnet.
Beispiel: (Opel Astra)
Die Klasse heißt Opel Astra und ist eine Unterklasse von der Klasse Auto.
Das heißt, dass der Opel Astra zwar ein Opel Astra ist, ist aber gleichzeitig auch ein Auto.
Dementsprechend kannst du im Programm später auch einfach ein Auto in einer Methode übergeben und das kann dann z.b. auch ein Opel Corsa sein und nicht nur ein Opel Astra.
Dementsprechend gibt es auch Variablen, welche die Eigenschaften einer Klasse (dem bauplan) darstellen.
Also welche Farbe das Auto hat.
Wie viel PS und wie viele Türen das Auto besitzt.
Das Auto soll aber auch fahren können und es sollte sich an -und abschalten lassen können.
Das realisierst du in Methoden oder auch Funktionen.
Das sind dann einfach sogenannte unterprogramme, welche vom Programm ausgeführt werden.
Beispiel:
public void moveForwards(Map map, Auto auto) {
/* Auto wird auf der Map(einfach eine Beispielklasse für eine Landfläche oder sowas) 5 Meter nach vorne bewegt */
map.changePositionForwards(auto, 5);
}
In diesem Beispiel ist es völlig egal, was für ein Auto du wählst.
Es könnte ein Opel Astra oder ein Opel Corsa sein, denn diese sind beide Unterklassen von Auto.
Jetzt noch ein wichtiger Hinweiß.
Interfaces in Java definieren Verhaltensweisen welche implementiert werden sollten.
Das heißt, ein Interface sagt der Klasse inder es implementiert wird, welche Methoden mit welchen Signaturen(X1) es besitzen MUSS.
Folgendes Beispiel eines Interfaces (Name: IMove)
public void moveForwards(Map map, Vehicle vehicle);
public void moveBackwards(Map map, Vehicle vehicle);
public void moveLeft(Map map, Vehicle vehicle);
public void moveRight(Map map, Vehicle vehicle);
Ein Auto könnte dann von der Klasse Vehicle erben, was bedeutet das jedes Auto dann auch ein Vehicle ist. Und in der Klasse Vehicle könnte man nun dieses Interface mit dessen Methoden implementieren.
Da das Vehicle natürlich nicht weiß, wie es sich zu bewegen hat, weil es zu abstrakt ist, bleibt dies hier erstmal offen.
Du kannst aber die Methoden in den Unterklassen überschreiben, weil diese ja immer weitervererbt werden, solange diese nur public oder protected sind.
überschreiben = Unterklasse vergibt neues Verhalten (Neue Abfolgen von Befehlen).
Du könntest natürlich auch direkt in den Unterklassen das Interface implementieren, aber das müsstest du dann für jede Klasse machen, was ich persönlich ziemlich nervig finde, da jedes Vehicle sich sowieso bewegen kann, macht es durchaus Sinn dort das Interface zu Platzieren.
Das ganze könnte man dann natürlich auch direkt in die Klasse Vehicle reinmachen, jedoch könnte man das Interface dann z.b. wenn man dann noch eine Klasse Flugzeuge hat, welches ja kein Fahrzeug (Vehicle) ist, implementieren, was ja nicht mehr ginge, wenn man es nur für Vehicle machen würde.
Deshalb sollte man vor einem Programm immer planen was man eigentlich mit diesem Programm machen will und sich einige Dinge offen lassen und so programmieren, dass man jederzeit etwas auswechseln kann.
Ich hoffe ich konnte helfen.