Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder i klassen Föreläsning 12
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel En variabel vars typ är en klass eller ett fält kallas för en referensvariabel. löpare1, heltal och dectal är exempel på referensvariabler. Deltagare löpare1; int[ ] heltal; double[ ] dectal; Objektet som referensvariabeln refererar till måste skapas med new. Deltagare löpare1 = new Deltagare(); int[ ] heltal = new int[5]; double dectal = new double[10]; Det finns speciella sätt att skapa strängar och fält: int[ ] tal = {23, 89,12};// endast vid initiering String str = ”Hej”;
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Referensvariabeln refererar till objektet som adressen på ett brev refererar till huset. Deltagare löpare1 = new Deltagare(); int[ ] heltal = new int[5];
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Vid användning av parametrar är det referensen som kopieras. Parametern refererar alltså till samma objekt, inte en kopia: Deltagare löpare1 = new Deltagare(); resultat(löpare1); public static void resultat(Deltagare delt1) { : } Samma sak gäller vid tilldelning: int[ ] heltal = new int[5]; int[ ] tal; : tal = heltal;
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Konstruktorer Med konstruktorer kan man initiera objekt. public class Deltagare { public String namn; public int tid; public Deltagare(String inNamn) { namn = inNamn; } public Deltagare(String inNamn, int inTid) { namn = inNamn; tid = inTid; } public String toString() { return "Namn="+namn+" Tid="+tid; } } Deltagare löpare1 = new Deltagare(”Bosse”,0); Deltagare löpare2 = new Deltagare(”Eva”); Konstruktorer.java
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng private attribut och set-och getmetoder Det har visat sig att instansvariabler nästa alltid ska vara private. Detta för att undvika fel i program. public class Deltagare { private String namn; private int tid; public Deltagare(String inNamn) { namn = inNamn; } public Deltagare(String inNamn, int inTid) { namn = inNamn; tid = inTid; } public String toString() { return "Namn="+namn+" Tid="+tid; } } private -deklarerade attribut och metoder är endast tillgängliga inom klassen. Nu fungerar inte Lopare1Klass.java längre. Lopare1Klass.java
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng private attribut och set-och getmetoder Med hjälp av set- och get-metoder får andra klasser tillgång till attributen. Set-metoder till de attribut som ska kunna ändras och get-metoder för de attribut vars värde ska kunna avläsas. public class DeltagareVer2 { private String namn; private int tid; : public void setNamn(String inNamn) { namn = inNamn; } public String getNamn() { return namn; } public int setTid(int inTid) { tid = inTid; } public int getTid() { return tid; } } DeltagareVer2.java Lopare1KlassVer2.java
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Fält med objekt Det går bra att använda fält (vektorer) med objekt. Man måste bara komma ihåg att skapa objekten. Deklarera fältet: Deltagare[ ] deltagare = new Deltagare[10]; // 10 referensvariabler Skapa objekten: for(int i=0; i<deltagare.length; i++) { namn = Input.readLine(”Ange namn”); deltagare[i] = new Deltagare(namn); } Varje element i fältet deltagare är referens till ett Deltagare- objekt och används som ett sådant, t.ex. deltagare[i].tid = 23; System.out.println(deltagare[i].namn); System.out.println(deltagare[i].toString()); Lopare3KlassVer2.java Lopare3.java Lopare3Klass.java
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Fler metoder i klassen Om två deltagares tid ska jämföras kan metoden compareTo vara användbar. compareTo returnerar: 0om bifogad deltagare har lägst tid public class DeltagareVer2 { private String namn; private int tid; : public int compareTo(DeltagareVer2 delt) { if(tid<delt.getTid())// tid<delt.tid går bra return -1; else if(tid==delt.getTid())// tid==delt.tid går bra return 0; else return 1; } } Kortare skrivsätt: public int compareTo(DeltagareVer2 delt) { return tid-delt.getTid(); } LopareSorterat.java