Ik bekijk het graag zo:
Op de weg rijden heel veel auto's. Laten we het eens hebben over een auto. Je kan niet zeggen wat voor kleur, type of snelheid die auto kan halen want ik heb je niet verteld wat voor een auto het is. "Auto" is in dit geval de klasse. Als we het dan hebben over het lelijke gele ding dat in mijn garage staat, dan kunnen we bovenstaande vragen wel beantwoorden en weten we dat dat gele ding het object is.
Het object is niets anders dan een auto gebouwd naar de structuur van de klasse. De klasse zegt bvb dat een auto een snelheid heeft, en een kleur en een merknaam en dergelijke. Welke dat zijn, dat zegt de klasse niet. Enkel een object heeft een specifieke invulling van deze "variabelen".
Het verschil tussen publieke en statische methodes is het volgende:
Stel je voor dat een klasse auto een methode heeft die "benzineTanken()" noemt. Deze methode is verantwoordelijk voor meer benzine in de tank van de auto te krijgen.
Okee dan, dus stel jezelf voor dat we een object hebben "taxi". We willen de taxi bijtanken, dus we zeggen: "taxi.benzineTanken()" en de taxi is bijgetankt. "benzineTanken" is dus in dit geval een publieke methode.
Een statische methode is een methode die gebruikt kan worden zonder dat er een specifiek object bestaat van deze klasse. Normale methoden kunnen gebruik maken van de attributen (de variabelen) van een object alsof die attributen gewone veranderlijken zijn. Ze zijn dus nauw met dat object verbonden. Het kan ook nuttig zijn, attributen en objecten te associëren met de hele verzameling objecten van hetzelfde type, dus met de klasse als geheel. Als de declaratie van een attribuut of methode voorafgegaan wordt door het sleutelwoord static, betreft het een lid van de klasse, niet van één object in het bijzonder.
Stel jezelf voor dat we een klasse "Auto" hebben. Stel nu dat deze klasse wil onthouden wat de laatst toegevoegde auto is. Dus aan welk object (van het type Auto) je ook vraagt wat de laatst toegevoegde auto is, je moet hetzelfde antwoord krijgen. Dat los je op door een static methode op te nemen in die klasse, bvb: "getLaatstToegevoegdeAuto" en ook een static variabele "laatstToegevoegdeAuto" waarin je de laatst toegevoegde auto opslaat. Deze laatste variabele staat maar één keer in je geheugen, en elk object van het type "auto" kan aan deze variabele aan.
Als je dan bijvoorbeeld wil weten wat nu de laatst toegevoegde auto is zeg je:
Auto.getLaatstToegevoegdeAuto();
Let op dat ik hier een methode aanroep van de klasse niet van het object. Dus ik zei niet "taxi.getLaatstToegevoegdeAuto()", maar ik zei: "Auto.getLaastToegevoegdeAuto()".
Hier is getLaatstToegevoegdeAuto dus een static methode.