Czy wiecie, że w języku Java można również zrobić przeciążanie konstruktorów? Stosując identyczną sztuczkę z metodami, jesteśmy w stanie to "nanieść" również na konstruktory. Aczkolwiek trzeba wiedzieć jak to robić dobrze, gdyż konstruktory wyróżniają się nie tylko zastosowaniem, ale także innym doborem słów kluczowych. Zapraszam każdego zainteresowanego do dalszego ciągu.

PRZECIĄŻANIE KONSTRUKTORÓW A PRZECIĄŻANIE METOD

Jak przeciążać metody to wiemy (jak nie, to tutaj najpierw zajrzeć). Przy konstruktorach sprawa wygląda nieco inaczej i w tym miejscu na scenę wejdzie kolejne słowo kluczowe "this". Umożliwia ono odwoływanie się do tej samej klasy (do samego siebie, ale nie utożsamiać tego stwierdzenia z rekurencją!). Dużo częściej jest wykorzystywane w sytuacjach gdy przypisujemy wartości parametrów formalnych do danych składowych i powstaje między nimi kolizja nazw! Jeżeli tego nie rozumiecie, spokojnie. To też zawrę w kodzie źródłowym.

Przeciążanie konstruktorów ma takie same zastosowanie jak przeciążanie innej metody - chcemy mieć możliwość wyboru jednej z kilku "dróg" utworzenia obiektu. Chociaż cel jest identyczny, to zapis już nieco inny.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Starczy tych gadek. Prezentuję następny program w języku Java wykorzystujący omawiany manewr. W środku niego dołączyłem też przypadek kiedy "this" jest potrzebne w chwili przypisywania wartości danym składowym:

  • KLASA "Main"
public class Main
{
	public static void main(String[] args)
	{
		Point a = new Point();
		Point b = new Point(5, 8);

		System.out.println(a);
		System.out.println(b);
	}
}
  • KLASA "Point"
public class Point
{
	private int x, y;

	public Point()
	{
		this(0, 0);
	}

	public Point(int x, int y)
	{
		setPosition(x, y);
	}

	public void setPosition(int x, int y)
	{
		this.x = x;
		this.y = y;
	}

	@Override
	public String toString()
	{
		return "(" + x + ", " + y + ")";
	}
}

Klasa "Point" tworzy nowy punkt w układzie dwuwymiarowym. Posiada ona przeciążanie konstruktorów i tam macie pierwsze użycie słowa kluczowego "this", nie dajemy nazwy "Point" jak mogliście pomyśleć na wstępie!!! W tym przykładzie, gdy korzystamy z konstruktora bezparametrowego, to wówczas "sięga" on do drugiego konstruktora z domyślnymi wartościami i tam wykonuje się funkcja "setPosition". Idąc jej śladem, natrafiamy na drugi sposób użycia "this" i jest on konieczny w celu rozróżnienia o jakie "x" i o jakie "y" nam chodzi. Gdybyście za nazwy parametrów dorzucili na przykład "newX" i "newY", to wtedy możecie odrzucić ten przedrostek bo wtedy kompilator sobie poradzi. Oto dwa przypadki przy których "this" staje się potrzebne w użyciu.


Tak wygląda przeciążanie konstruktorów w przełożeniu na w miarę prosty przykład. Dziękuję za uwagę. To wszystko na ten temat.

PODOBNE ARTYKUŁY