ist doch ganz einfach:
eine klasse definiert die datenstruktur für objekte, die aus dieser klasse instanziert werden sollen, sowie sämtliche methoden, die das objekt braucht.
von jeder klasse kannst du neue klassen ableiten (per extend), wobei die struktur der klasse und alle ihre methoden auf die neue klasse vererbt werden, du diese aber um beliebig viele neue methoden (und variablen) erweitern kannst (daher auch der begriff "extend").
sämtliche methoden sollten möglichst private definiert werden, wenn du sauber arbeiten willst (z.b. zugriffe auf variablen des objekts nur über private getter und setter methoden), das ist ja der sinn der objektorientierten programmierung, dass nicht an verschiedenen stellen im code später wild auf verschiedenste arten mit den variablen eines objekts herumgefuhrwerkt wird, sondern nur über die privaten methoden auf das objekt eingewirkt wird, weil diese (priv. meth.) eben nur an einer stelle im code implementiert sind und spätere änderungen an einer methode zuverlässig im ganzen code wirksam werden.
public methods sollten also genau genommen nur in statischen klassen eingesetzt werden, wenn irgendwie möglich. statische klassen sollten aber wo möglich vermieden werden, weil sie wieder zum unsauberen programmieren verleiten.
packages dienen nur der logischen strukturierung der vielen klassen, damit man die übersicht nicht verliert; das ist nur eine frage der ordnung. beans haben allerdings weiterreichende hintergründe.
arrays und schleifen sind nicht auf objektoriente programmierung beschränkt, die gibt es in jeder höheren programmiersprache.
arrays sind nichts anderes als in einer oder mehreren dimensionen indizierte "felder" von variablen.
schleifen sind neben bedingungen die wichtigsten kontrollstrukturen, die nichts anderes bezwecken, als einen bestimmten code-abschnitt bis zum erreichen einer abbruchbedingung zu wiederholen.
back to school!