W programowaniu obiektowym konstruktor to specjalna funkcja, którą wywołujesz w celu utworzenia obiektu. Konstruktorzy mają kilka unikalnych cech, które umożliwiają im pracę.

W Javie nazywasz konstruktora po jego klasie. Konstruktor to metoda zdefiniowana w klasie, której dotyczy. Konstruktorzy Java mogą używać przeciążania, aby zapewnić alternatywne zachowanie. Konstruktorzy w Javie mogą również wykorzystać dziedziczenie do ponownego wykorzystania kodu.

Dlaczego i tak potrzebujesz konstruktorów?

Konstruktorzy są podstawą programowanie obiektowe, a Java nie jest wyjątkiem. Ten przykład pokazuje, jak można zdefiniować podstawową klasę Circle z jedną właściwością danych i jedną metodą:

klasa publiczna krąg {
publiczny podwójny promień;
public double area() { return 3.14159 * promień * promień; }
}

Następnie możesz utworzyć instancję tej klasy i wchodzić z nią w interakcję:

Okrąg c = nowy Okrąg();
c.promień = 2;
System.out.println (c.area()); // 12.56636

Ale jest to mniej wygodne i solidne, niż mogłoby być. Dobrą praktyką obiektową jest enkapsulacja danych, chroniąca je przed nieautoryzowanym dostępem:

klasa publiczna krąg {
prywatny podwójny promień;
public double area() { return 3.14159 * promień * promień; }
public void setRadius (podwójny r) { promień = r; }
}

Teraz kod wywołujący może używać ustaw promień metody i nie musisz martwić się o szczegóły jej realizacji:

Okrąg c = nowy Okrąg();
c.setPromień (2);

Konstruktory oferują jeszcze lepszy sposób dostarczania danych do obiektu podczas jego tworzenia. Są bardzo często używane do inicjalizacji właściwości, takich jak promień tutaj.

Przykłady prostych konstruktorów

Najbardziej podstawowy konstruktor to taki, który nie ma żadnych argumentów i nic nie robi:

klasa publiczna krąg {
krąg publiczny() {}
}

Zobacz też: Dowiedz się, jak tworzyć klasy w Javie

Jeśli nie zdefiniujesz konstruktora, Java zapewni domyślny, który zachowuje się w ten sam sposób.

Zwróć uwagę na kilka rzeczy:

  1. Nazwa konstruktora odpowiada nazwie klasy.
  2. Ten konstruktor używa publiczny modyfikator dostępu, więc każdy inny kod może go wywołać.
  3. Konstruktor nie zawiera zwracanego typu. W przeciwieństwie do innych metod, konstruktory nie mogą zwracać wartości.

Konstruktorzy zazwyczaj przeprowadzają pewien rodzaj inicjalizacji. Zauważ, że powyższy kod nie inicjuje wartości promienia. W takim przypadku język automatycznie ustawi go na zero. Ta klasa oczekuje, że użytkownik będzie używał ustaw promień(). Aby użyć bardziej użytecznej wartości domyślnej niż 0, możesz przypisać ją w konstruktorze:

klasa publiczna krąg {
public Circle() { promień = 1; }
}

Kręgi utworzone za pomocą tej klasy przynajmniej teraz będą miały rzeczywisty obszar! Rozmówca może nadal korzystać ustaw promień() aby zapewnić promień inny niż 1. Ale konstruktor może być jeszcze bardziej przyjazny:

klasa publiczna krąg {
Okrąg publiczny (podwójny r) { promień = r; }
}

Teraz możesz tworzyć kręgi o określonym promieniu już od urodzenia:

Okrąg c = nowy Okrąg (2);
System.out.println (c.area()); // 12.56636

Jest to bardzo powszechne zastosowanie dla konstruktorów. Często będziesz ich używać do inicjowania zmiennych do wartości parametrów.

Przeciążenie konstruktora

W definicji klasy możesz określić więcej niż jednego konstruktora:

public Circle() { promień = 1; }
Okrąg publiczny (podwójny r) { promień = r; }

Daje to wywoływanemu kodowi wybór sposobu konstruowania obiektów:

Okrąg c1 = nowy Okrąg (2);
Okrąg c2 = nowy Okrąg();
System.out.println (c1.area() + ", " + c2.area()); // 12.56636, 3.14159

Dzięki nieco bardziej złożonemu Circle możesz odkrywać ciekawsze konstruktory. Ta wersja przechowuje swoją pozycję:

klasa publiczna krąg {
publiczne podwójne x, y, promień;
public Circle() { promień = r; }
Okrąg publiczny (podwójny r) { promień = r; }
publiczny okrąg (podwójny x, podwójny y, podwójny r) {
to.x = x; to.y = y; promień = r;
}

public double area() { return 3.14159 * promień * promień; }
}

Możesz teraz utworzyć Okrąg bez argumentów, pojedynczy promień lub współrzędne xiy wzdłuż promienia. Jest to ten sam rodzaj przeciążania, który Java obsługuje dla dowolnej metody.

Łączenie konstruktorów

Co powiesz na stworzenie jednego kręgu, opartego na innym? Dałoby nam to możliwość łatwego kopiowania kręgów. Przestrzegaj następującego bloku:

krąg publiczny (kółko c) {
to.x = c.x;
to.y = c.y;
this.promień = c.promień;
}

To zadziała, ale niepotrzebnie powtarza jakiś kod. Ponieważ klasa Circle ma już konstruktor, który obsługuje poszczególne właściwości, możesz go wywołać, używając to słowo kluczowe:

krąg publiczny (kółko c) {
to (c.x, c.y, c.promień);
}

Jest to jedna forma tworzenia łańcucha konstruktorów, wywołująca jeden konstruktor z innego. Używa mniej kodu i pomaga scentralizować operację, zamiast ją duplikować.

Dzwonienie do konstruktora nadrzędnego

Inna forma tworzenia łańcucha konstruktorów występuje, gdy konstruktor wywołuje konstruktor swojej klasy nadrzędnej. Może to być zarówno jawne, jak i dorozumiane. Aby jawnie wywołać konstruktor nadrzędny, użyj Wspaniały słowo kluczowe:

super (x, y);

Wyobraź sobie klasę Shape działającą jako rodzic okręgu:

klasa publiczna kształt {
podwójne x, y;
public Shape (podwójne _x, podwójne _y) { x = _x; y = _y; }
}

Obsługuje wspólne pozycjonowanie dla wszystkich kształtów, ponieważ jest to wspólna funkcjonalność. Teraz klasa Circle może delegować obsługę pozycji do swojego rodzica:

klasa publiczna krąg rozszerza kształt {
podwójny promień;
Public Circle (podwójne r) { super (0, 0); promień = r; }
publiczny okrąg (podwójny x, podwójny y, podwójny r) {
super (x, y);
promień = r;
}
}

Budownictwo superklasowe jest bardzo ważnym aspektem dziedziczenie w języku Java. Język wymusza to domyślnie, jeśli nie zadzwonisz wyraźnie Wspaniały w twoich konstruktorach.

Modyfikatory dostępu w konstruktorach

Konstruktorzy mogą zawierać w swoim podpisie modyfikator dostępu. Podobnie jak inne metody, definiuje to, które typy wywołującego mogą uzyskać dostęp do konstruktora:

Test klasy publicznej {
prywatny statyczny Test uniqueInstance = new Test();
prywatny Test() { }
publiczny test statyczny getInstance() {
zwróć unikatową instancję;
}
}

To jest bardziej skomplikowany przykład, więc postaraj się go zrozumieć:

  • Klasa nie jest abstrakcyjna, więc można z niej tworzyć instancje.
  • Konstruktor jest prywatny, więc tylko ta klasa sama może utworzyć nową instancję.
  • Za pomocą statycznej właściwości i metody klasa uwidacznia pojedynczą, unikatową instancję siebie wywołującym.

Użyj konstruktorów w Javie do tworzenia obiektów

Konstruktory są niezbędne do programowania obiektowego. Pozwalają tworzyć przedmioty, co jest niezbędne!

W Javie konstruktory wyglądają jak inne metody i działają w bardzo podobny sposób. Należy pamiętać o specjalnych zasadach dotyczących konstruktorów domyślnych, przeciążania i tworzenia łańcuchów konstruktorów. Jeśli konstruktorzy są dla Ciebie nowicjuszami, możesz poczytać o innych podstawowych koncepcjach Javy, których powinieneś się nauczyć na początku.

E-mail
10 podstawowych pojęć związanych z Javą, których powinieneś się nauczyć na początku

Niezależnie od tego, czy piszesz GUI, tworzysz oprogramowanie po stronie serwera, czy aplikację mobilną na Androida, nauka Java będzie Ci dobrze służyć. Oto kilka podstawowych pojęć związanych z Javą, które pomogą Ci zacząć.

Czytaj dalej

Powiązane tematy
  • Programowanie
  • Jawa
  • Wskazówki dotyczące kodowania
O autorze
Bobby Jack (51 opublikowanych artykułów)

Bobby jest entuzjastą technologii, który przez prawie dwie dekady pracował jako programista. Pasjonuje się grami, pracuje jako redaktor recenzji w magazynie Switch Player i jest zanurzony we wszystkich aspektach publikowania online i tworzenia stron internetowych.

Więcej od Bobby'ego Jacka

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Jeszcze jeden krok…!

Potwierdź swój adres e-mail w e-mailu, który właśnie do Ciebie wysłaliśmy.

.