I första metoden:
Metoden
paint tar som parameter ett objekt av typen Graphics, den parametern kallas
g.
Graphics är en abstrakt (abstract) klass, vilket innebär att man inte kan skapa objekt av den typen, men klassen definierar diverse grundegenskapen hos klasser som ärver (extends) Graphics. Tänk dig den klasserna
abstract Building och
House extends Building, du kan inte skapa något som bara är en building, men du kan skapa hus och ett hus är en byggnad. I klassen Buildnig kan man lägga egenskaper som är gemensamma för alla byggnader, exempelvis
antalFönster(). De egenskaperna ärv sedan av bland annat House och House kan ha en egen implementering av de olika metoderna, men om det inte finns används "defaultmetoden" i Building. Att lämplig metod existerar kontrolleras vid kompilering, men väljs vid körning.
Tillbaka till Graphics. Parametern
g, som kan minst allt som ett Graphicsobjekt kan, har en metod som heter
drawString, den metoden anropas för objektet g.
Om vi fortsätter med husen så kan vi tänka oss metoden
unlockHouse() som låser upp ytterdörren. Då vi kan ha flera hus så måste vi tala om vilket hus vi ska låsa upp, alltså för vilket objekt metoden ska anropas. ex
h.unlockHOuse(), vilket låser upp huset
h, men inget annat hus (om det är ordentligt kodat, sidoeffekter kan förekomma, medvetet eller omedvetet).
Det handlar alltså om att det endast är objektet
g som ska beröras av metodanropet.
Nu råkar metoden
drawString vara abstract, så den kan göra lite vad man vill, men enligt javadoc* ska den "Draws the text given by the specified string, using this graphics context's current font and color."
https://docs.oracle.com/javase/7/doc.../Graphics.html