Skocz do zawartości
  • 0

Kilka pytań


stefanik11
 Udostępnij

Pytanie

Witam, jakoiż jestem początkujący w javie, chciałbym dopytać się o pewne rzeczy, na które nie znalazłem odpowiedzi w internecie.

#1 kiedy używać statycznych zmiennych (w jakich przypadkach)?

#2 czym jest abstrakcyjność klas?

#3 jakie właściwości mają zmienne protected? (protected String zmienna;)?

 

Z góry dziękuję i pozdrawiam.

 

Odnośnik do komentarza
Udostępnij na innych stronach

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

1. Najlepiej nigdy, no ale są przypadki że się przydaje, np stałe:
private/public static final SIZE_OF_GUI = 54;
(wyjątkowo, w stałych, używamy wielkich liter i _)
a stałymi powinno być wszystko co jest z dupy wpisane w kodzie, tak zwane magic numbers, czy czasem magic strings, czyli jak robisz taska co ma się odpalić za 10 sekund, i robisz bezpośrednio w odpalaniu że ma czekać 200 ticków, to źle, powinna być stała. (a najlepiej to w configu :P)
Czasem też przechowuje się tam jakieś dane, ale to rzadko, do np jakiś singletonów, jak czesto pluginie robi się statyczne pole z instancją co by potem szybciej pobierać przez też statyczną metodę getInstance czy coś, ogólnie singletonów też się czesto unika, ale w przypadku pluginu jest to ok, bo bukkit i tak nie zezwala na 2 instancje tego samego pluginu.

2. To obszerny temat i wiąże się też z 3... lepiej wygoogluj coś po angielsku, ale w skrócie:
są interfejsy i klasy abstrakcyjne, dana klasa może implementować wiele interfejsów i rozszerzać tylko 1 inną klasę.
Datego zazwyczaj staramy używać się interfejsu do opisania jakiejś możliwości, tak jak np jest w bukkcie `CommandSender` każdy może to sobie zaimplementować do dowolnej klasy.
Jednak czasem klasy abstrakcyjne przydają się bardziej, bo można w nich przechowywać pola, czy tworzyć metody o innej widoczności niż public, co pomaga lepiej kontrolować przepływ danych.
Często używa się też obu...

Np interface Job z metodą void giveSalary(Player), porem robisz sobie abstrakcyjną klasę z implementacją giveSalay(Player) która daje graczu tyle kasy ile zwróci metoda protected double calaculateSalary(Player player), i ta metoda będzie abstrakcyjna w tej klasie, czyli podobnie jak z interfejsem, potem klasa rozszerzająca musi ją zaimplementować, a sama klasą z tą metodą musi być abstrakcyjna - tak samo jak interfejs, sama nie definiuje jeszcze żadnego pełnego typu, nie można utworzyć nowej instancji takiej klasy (no bo nie wszystkie metody są zaimplementowane)
3. i właśnie protected sprawia że daną metodę/zmienną można użyć tylko z tego samego package (tak samo jest kiedy nie dasz żadnego modyfikatora) ORAZ z klas rozszerzających daną klasę.

 

A tak to słabo googlujesz, i szukaj po angielsku, więcej znajdziesz. No i szukaj pod javę a nie bukkita 

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...