Objektorientierte Programmierung ist im Prinzip sehr einfach. Früher hatte man Daten und Funktionen, die auf diesen Daten arbeiteten. Einige Sprachen begannen, neben den vorgegebenen Datenstrukturen /wie Zahlen und Strings) mit "Records" nutzerspezifische Datenstrukturen anzubieten, also konnte man z.B. den Record "Kuh" mit den Feldern "name" (ein String), "alter" (eine Zahl) und "kälber" (eine Liste von "Kuh"-Records) definieren. Soweit kannst du dir das sicher gut vorstellen.
Nun hatte man z.B. Funktionen wie erhöheAlter(Kuh kuh) oder neuesKalb(Kuh kuh, Kuh kalb). Irgendwann kam ein schlauer Mensch auf die Idee, dass solche Funktionen doch eigentlich irgendwie zum Kuh-Record "dazugehören", weil sie nur mit diesem zusammen sinnvoll wären. Voila, da haben wir eine Klasse, jetzt mit dem Methoden Kuh.erhöheAlter() und Kuh.neuesKalb(Kuh kalb). Diese Verschiebung von externen Funktionen zu internen Methoden ist der Kernpunkt der Objektorientierung: Daten und Operationen mit den Daten sind nicht länger getrennt, die "Kuh", an der eine Methode aufgerufen wird, ist der Methode selbst bekannt (man könnte auch sagen, dass immer automatisch ein zusätzliches Argument "this" von Typ "Kuh" mitgeliefert wird).
Jetzt stellt sich heraus, das wir viel Code duplizieren: Auch ein Schaf braucht eine erhöheAlter-Methode, und eine neuesLamm(Schaf lamm)-Methode. Nun war die Idee, gemeinsamen Code in gemeinsamen Oberklassen zusammenzuführen, also Vererbung.
Alles in allem ein recht logisches Vorgehen, und im Prinzip sehr einfach zu verstehen. Ich denke, du lässt sich zu sehr von den Java-spezifischen Details ablenken. Gehe erst einmal die grundsätzlichen Fragen an: Was ist der Unterschied zwischen Klassen und Objekten, was sind Referenzen, wie unterscheiden sich Konstuktoren von Methoden, wie funktioniert Vererbung u.s.w. Vergiss erst einmal Sachen wie statische Methode, Sichtbarkeitsbereiche, Generics und so.