Denne siden vil forsøke å forklare siden Objekter og klasser i Java-kontekst. Om man på forhånd har forstått den objektorienterte tankegangen, vil Java implementasjonenene være vesentlig lettere å forstå. Om man synes den objektorienterte tankegangen er vanskelig å forstå, vil det kanskje hjelpe å se den i Java-kontekst.
Definere en klasse
En klasse består typisk av felt, metoder og konstruktør(er). Samspillet mellom disse definerer oppførsel og tilstand for objektet.
Felter og metoder
Simple class public class MyDescriptiveAndConciseClassname { }
| Class with fields public class Song { public String title; public Person artist; public String lyrics; }
| Class with fields and methods public class Song { private String title; public Person artist; public String lyrics; public String getTitle() { return title; } public void setTitle (String title) { this.title = title; } public int countWordInLyrics(String word) { // Code that finds the number of // occurrences of "word" in lyrics-field } }
|
Konstruktør
En konstruktør er en spesiell metode som bare kalles når man oppretter en ny instans av en klasse, altså lager et nytt objekt. Dersom et objekt er avhengig av at felt x og y har verdier for at objektet skal ha en gyldig tilstand, gir en konstruktør muligheten til å si at disse feltene må "oppgis" ved opprettelsen. Om man ikke har definert noen konstruktør (slik som over), vil Java sette inn en "tom", og denne kalles men utfører ingen forandring på objektets initielle tilstand.
Class with constructor public class Song { private String title; public Person artist; public String lyrics; public Song(Person p) { artist = p; } public String getTitle {...} // Osv... }
|
Class with multiple constructors public class Song { private String title; public Person artist; public String lyrics; public Song(Person p) { artist = p; } public Song(Person p, String t) { artist = p; title = t; } // ... Methods
Se neste kolonne for eksempler på hvordan konstruktørene |
New instance of class Song s = new Song(); Koden ovenfor viser hvordan en variabel, s,
New instance of class, with constructor Person michaelJ = new Person(); Song s1 = new Song(michaelJ); Song s2 = new Song(michaelJ, "Beat it"); Song s3 = new Song(); // UGYLDIG!
|
---|
Objektreferanser
For å beskrive forholdet mellom en variabel og et objekt har det så langt blitt brukt termer som at variabelen er "knyttet til", "referer til", "holder på" objektet osv. Dette skal nå forsøkes tydeliggjøres.
I kode-eksemplene over er det nemlig ikke slik at f.eks. s2 er et Song-objekt, men at s2 peker/refererer til et Song-objekt. Dette kan illustreres med figurer.
Variable with reference Song s2 = new Song(); // Gitt at Song har en tom konstruktør Fig. 1 |
Assigning reference to other variable Song s1 = new Song("Beat it"); Song s2; Fig. 2 |
Continued s2 = s1; System.out.println(s1 == s2); // TRUE Fig. 3 |
Continued 2 s1 = new Song("Let it be"); Fig. 4 |
---|
Legg merke til at dersom man er i en situasjon slik som Fig. 3. Om man forandrer objektet s1 refererer til, vil man også ha forandret objektet s2 refererer til, siden disse er samme objekt.