4 svar
503 visningar
civilingengör behöver inte mer hjälp
civilingengör 193
Postad: 3 apr 2022 10:43

Att skapa en konstruktor

Hej! Jag har lite frågor om konstruktorn som används vid implementationer av klasser.

1. Hur vet man när man ska skriva "this." respektive när ingen sådan referens behövs göras?

2. Hur gör man om man vill implementera en privat metod och använda den från konstruktorn? 

3. Hur fungerar det egentligen när en privat metod skrivs i konstruktorn, hur är det möjligt att konstruktorn innehåller metoder? Körs denna privata metod då ett nytt objekt skapas?

4. Exemplet nedan visar en kod jag skrivit där jag vill lägga en privat metod i min konstruktor, gör jag rätt?

Programmeraren 3390
Postad: 3 apr 2022 15:41

1. "this" är underförstått om det inte finns en parameter med samma namn.

public class Ball {
  private String name;

  public Ball(String name) {
    this.name = name;
  }
}

Jag rekommenderar att aldrig använda samma namn på parametrar som någon av klassens variabler, lätt att det blir fel som är svåra att hitta. Men det är en smaksak och leder till ändlösa diskussioner programmerare emellan (tro mig, jag har hört alla argument). Jag skulle skrivit ovanstående som:

public class Ball {
  private String _name;

  public Ball(String name) {
    _name = name;
  }
}

I din konstruktorkod är "this.size" en referens till klassvariabeln size. "size" är referens till konstruktorns size-parameter.

2) Konstruktorn finns ju i klassen och kommer därför åt privata metoder.

3) Konstruktorn innehåller inte metoder (klassen innehåller metoder). Men createCards() körs på det nya objektet eftersom den anropas från konstruktorn.

4) Ja (fast du skickar ett hårdkodat filnamn istf backFileName).

civilingengör 193
Postad: 3 apr 2022 18:10

Som följd på detta har jag ytterligare en fråga: hur jag löser att jag i metoden "createCards" får felmeddelandet "board cannot be resolved to a variable". Jag vet att det grundar sig i att metoden inte känner igen variabeln då den endast existerar inuti en annan metod men borde inte "board" kännas igen pågrund av det faktum att den finns i en metod som finns i konstruktorn? Hur löser jag detta? 

 

Board är av rätt returtyp men jag antar att den måste göras tillgänglig för användning i ytterligare metoder på något vis. Tack så obeskrivligt mycket för din tid och hjälp!

Kod som står ovanför metoden getCard:

Programmeraren 3390
Postad: 3 apr 2022 22:47

Lite osäker på vilket fel du får, board deklareras i createCards() så där borde det funka.
Är felet kanske i getCard()?

Det verkar som om board hör till MemoryBoard, i så fall borde du deklarera den som en klassvariabel och skapa board-matrisen i konstruktorn.

civilingengör 193
Postad: 4 apr 2022 08:49 Redigerad: 4 apr 2022 09:09

Jag tror jag postar frågan i en ny tråd istället, detta blev lite rörigt. Tack så otroligt mycket för din hjälp och trevlig måndag på dig!

Svara
Close