Użycie operatora this - brak zapisu w polu klasy

Odpowiedz Nowy wątek
2018-08-15 16:01

Rejestracja: 14 lat temu

Ostatnio: 1 miesiąc temu

0

Witam,

zapoznaję się z operatorem this. Mam zdefiniowany konstruktor domyślny w klasie oraz przeciążony konstruktor z jednym parametrem. Wywołanie konstruktora domyślnego powinno wywołać konstruktor z jednym parametrem gdzie parametrem jest liczba 1. Natomiast gdy wywołuję konstruktor domyślny i sprawdzam jaka wartość jest w polu promien klasy Kolo to pokazuje mi ze jej wartość wciąż jest równa 0. Dlaczego tak się dzieje? Oto kod:
Klasa Kolo.java:

public class Kolo
{
    private int promien;

    public void Kolo()
    {
        this.Kolo(1); //gdy wywoływany jest konstruktor domyślny to parametr domyślny promienia to 1
    }

    public void Kolo(int r)
    {
        this.promien = r;
    }

    //akcesory
    public double getPole()
    {//pole to PI * r * r
        return Math.PI*this.promien*this.promien;
    }

    public int getPromien()
    {
        return this.promien;
    }
}```

kod klasy Main.java:
```java
import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Scanner wejscie = new Scanner(System.in);

        Kolo kolo = new Kolo(); //wywoływany konstruktor domyślny

        //sprawdźmy pole z domyślnym wejściem (promien = 1)
        System.out.println(kolo.getPole());
        System.out.println(kolo.getPromien());
    }
}

Pozostało 580 znaków

2018-08-15 16:09

Rejestracja: 2 lata temu

Ostatnio: 2 godziny temu

0

Dlatego, że metody public void Kolo() i public void Kolo(int r) to nie konstruktory. Spróbuj utworzyć obiekt new Kolo(2), to zobaczysz, że nie ma takiego konstruktora.

O konstruktorach.

I dla ścisłości, to this jest słowem kluczowym a nie operatorem.

edytowany 2x, ostatnio: Michał Sikora, 2018-08-15 16:23

Pozostało 580 znaków

2018-08-15 16:09

Rejestracja: 1 rok temu

Ostatnio: 4 godziny temu

0
  public Kolo(int p )
    {
        promien = p;
    }
 public Kolo()
    {
        this(1); //gdy wywoływany jest konstruktor domyślny to parametr domyślny promienia to 1
    }
edytowany 1x, ostatnio: AnyKtokolwiek, 2018-08-15 16:13
Nie, to nie zadziała. (Post został już zedytowany). - Michał Sikora 2018-08-15 16:10
racja, nie zauważyłem nadmiarowego void. Tamto ma się w ogóle kompilować? - AnyKtokolwiek 2018-08-15 16:14
Da się. Możesz zrobić np. Kolo kolo = new Kolo(); kolo.Kolo();. - Michał Sikora 2018-08-15 16:15

Pozostało 580 znaków

2018-08-15 17:03

Rejestracja: 14 lat temu

Ostatnio: 1 miesiąc temu

0

OK już mam. Tak, niepotrzebnie (z przyzwyczajenia) wrzuciłem void. No i przy rekursyjnym konstruktorze (znowu przyzwyczajenie) zapisałem this.Kolo(1) zamiast this(1).

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0