1 svar
162 visningar
blygummi 216 – Fd. Medlem
Postad: 22 jun 2019 13:18 Redigerad: 22 jun 2019 13:21

”Type” framför parametern i (kopierings) konstruktor är klassens namn

”Type” framför parametern i (kopierings) konstruktor är klassens namn. Vad innebär detta för parametern? Vad möjliggör detta för parametern i fråga?

Då vet datorn ju inte vad den har för typ, vad innebär det att ha klasstyp? Att den parametern är identisk, eller har möjligheten, är kabel till att endast anta en godtycklig typ av de redan existerade parametrarna som tillhör klassen? 

IGIL 43
Postad: 22 jun 2019 19:17

Då jag inte riktigt förstår din fråga kommer jag svara ganska brett.


Kopierings konstruktorer finns för att man ska kunna kopiera information som ett objekt innehåller till ett nytt objekt. Detta kan göras på olika sätt. En klass kan ha flera olika konstruktorer. En av dessa konstruktorer kan exempelvis innehålla samma typ som objektet själv, antag att vi har en klass bil.

public class Bil {

     //"Vanlig" Konstruktor

    public Bil(String modell, String regNr, etc... ) {

        ...

    }

}

I denna klass har vi en konsturktor som sätter egenskaper för våran bil. Men, vi kan lägga till flera konstruktorer. För att kunna ha flera konstruktorer måste dess parametrar vara olika. Ifall vi har två konstruktorer som har exakt samma parametrar, kommer vi få fel i koden.

Antag att vi lägger till en kopierings konstruktor som tar ett objekt av typen Bil, dvs samma typ som detta objekt.

public class Bil {

     //"Vanlig" Konstruktor

    public Bil(String modell, String regNr, etc... ) {...}

    //Kopierings Konstruktor

    public Bil( Bil b ) {

        ...

    }

}

Som vi ser med denna konsturktor så måste man skicka med ett objekt av typen bil. Det skulle kunna se ut såhär:

//Main metoden

//Skapa bil 1

Bil bil1 = new Bil( "Volvo V70", "ABC123", ... ); //Använder vanlig konstruktor

//Skapa bil 2 med exakt samma information som bil 1

Bil bil2 = new Bil( bil1 ); //Använder kopierings konstruktorn

För att skapa våran bil2 skickar vi med bil1 i konstruktorn. Men hur kopieras då bilen? Jo, med hjälp av get metoder. Antag att våran Bil klass har metoder för att hämta bilens instansvariabler, som förmodligen är modell, registreringsnummer osv. Konstruktorn kommer se ut på följande sätt.

//Kopierings konstruktor

public Bil( Bil b ) {

    //Sätt min modell till modellen för bilen vi skickade med

    this.modell = b.getModell(); //Antag att getModell är en metod för klassen Bil som retunerar modellen

    //Sätt mitt registreringsnummer till registreringsnummret för bilen vi skickade med

    this.regNr = b.getRegNr(); //Antag att getRegNr är en metod för klassen Bil som retunerar registreringsnummret

    //Osv för andra instansvariabler för klassen bil

}

På så sätt kan man enkelt kopiera en redan befintlig bil till ett nytt objekt.


Hoppas jag kunde svara på något. Annars, fråga igen!

Svara
Close