Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder
Repetition Ett objekt har instansvariabler och metoder. En klass är en mall som beskriver hur objekten ska se ut. En konstruktor kan användas för att ge objektets instansvariabler värden när det skapas.
De variabler som används för objekt är referenser, dvs de håller reda på var i minnet objektet lagrats. När man vill göra något med ett objekt måste man gå via referensen. Referenser Bil
Tilldelning - primitiva datatyper Vid tilldelning kopieras värdet från högerledet och lagras i variabeln i vänsterledet: Efter satsen x = y; xy xy int
Tilldelning - referenser För referenser till objekt är det istället minnesadressen till objektet som kopieras: nybil favorit favorit = nybil; Bil
Referenser till objekt Ett objekt kan ha flera referenser (med olika namn) till sig. När ett objekt inte har någon referens till sig så kan programmet inte längre nå instansen. Då kastas den automatiskt bort av skräpsamlaren.
Parametrar När en anropsparameter skickas med vid ett metodanrop kopieras dess värde till den formella parametern. Kan ett metodanrop ändra på anropsparametern? –Om den är av primitiv datatyp: VÄRDET KAN INTE ÄNDRAS –Om den är en referens till ett objekt: VÄRDEN INUTI OBJEKTET KAN ÄNDRAS –Om den är en referens till en sträng: STRÄNGEN KAN INTE ÄNDRAS
public och private private - instansvariabler och metoder som man bara kommer åt i samma klass. private double pris; public - instansvariabler och metoder som man kommer åt även från andra klasser. public void reklam(); En väluppfostrad programmerare deklarerar alla sina instansvariabler som private !
Klassvariabler Normalt har varje objekt sina egna data. En variabel kan deklareras med static static int antalbilar; Då kommer dess minnesutrymme att vara gemensamt för alla objekt ur klassen - om värdet ändras för ett objekt ändras det alltså för alla. Dessa variabler brukar kallas klassvariabler.
Klassmetoder Normalt anropas alltid en metod via ett objekt (en instans av klassen). Color röd = new Color(255,0,0); Color mörkröd = röd.darker(); Om en metod deklareras med static kan den anropas direkt från klassen - utan att man behöver skapa något objekt. double x = Math.sqrt(17); En klassmetod kan använda klassvariabler men inte instansvariabler.
class BerrasBegBilar2{ public static void main(String[] args) { Bil fiesta = new Bil("röd", 33000); Bil citroen = new Bil("gul", 20000); välkommen(); fiesta.reklam(); citroen.reklam(); citroen.sättPris(citroen.specialpris(10)); System.out.print("Extraerbjudande: den " + citroen.färg() + "a bilen"); System.out.println(" kostar endast " + citroen.pris() + " kronor idag!!!!!"); } // Metoden main() public static void välkommen() { System.out.println("********** Vällkommen till Berra ***********"); System.out.println("Just nu har jag " + Bil.antalbilar + " bilar inne!"); } // Metoden välkommen() } // Huvudklassen BerrasBegBilar2 class Bil{ private String färg; private double pris; public static int antalbilar = 0; public Bil(String nyFärg, double nyPris) { färg = nyFärg; pris = nyPris; antalbilar++; } // Konstruktorn Bil public String färg() { return färg; } public double pris() { return pris; } public void sättPris(double nyPris) { pris = nyPris; } public String toString() { return "Färg: " + färg + " Pris: " + pris; } public void reklam() { System.out.print("En läckert " + färg + " bil"); System.out.println(" som kostar " + pris); } // reklam public double specialpris(int rabattprocent) { double rabattfaktor = 1.0-rabattprocent/100.0; return pris*rabattfaktor; } // Metoden specialpris() } // class Bil