Użycie operatora this - brak zapisu w polu klasy

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());
	}
}
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.

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
    }
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).

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