Co to jest metoda statyczna?
Obiektowa metoda programowania komputerowego zadeklarowana w klasie, ale nie zależna od żadnego konkretnego wystąpienia tej klasy, nazywa się metodą statyczną. Większość języków programowania zawiera słowo kluczowe static w deklaracji metody, aby metoda stała się statyczna. Metody te należą wyłącznie do klasy, w której są zawarte, a nie do żadnego obiektu utworzonego z tej klasy. Często są one nazywane metodami klasowymi .
Dosłowna nazwa klasy jest zwykle używana do uzyskania dostępu do metody statycznej, zamiast odwoływania się do niej za pomocą nazwy obiektu utworzonego instancji. W Javie dozwolone jest używanie nazw obiektów do odwoływania się do tych metod, ale zdecydowanie odradza się. Jeśli zostanie użyta nazwa obiektu, osoba czytająca kod może pomylić jedną z tych metod z metodą instancji.
Metody statyczne są często używane w klasach narzędziowych, które nie zależą od zmiennych instancji z jakiejkolwiek konkretnej klasy. Są one również używane, gdy programista potrzebuje dostępu do metody, ale nie ma potrzeby tworzenia instancji klasy, w której się ona zawiera. Klasy narzędzi zwykle nie są tworzone w postaci obiektów. Byłoby niezwykłe, gdyby metoda narzędziowa wymagała modyfikacji informacji o obiekcie. Metoda z klasy java.lang.math, taka jak pow (), byłaby przykładem użycia tego typu metody w klasie narzędziowej.
Metody instancji mają bezpośredni dostęp do zmiennych instancji, zmiennych statycznych, metod instancji i metod statycznych. Metody statyczne nie mają bezpośredniego dostępu do zmiennych instancji i metod instancji. Ze względu na naturę metod instancji mających lepszy dostęp do elementów klasy niż metod statycznych, metody instancji są rodzajem metod zwykle używanych w klasach regularnych.
Jedną z głównych wad metod statycznych jest dziedziczenie, gdy stosuje się polimorfizm. Tak długo, jak nadrzędna metoda statyczna nie zostanie zadeklarowana jako ostateczna, ta sama potomna metoda statyczna może być zakodowana w klasie potomnej tak, jakby była nadpisywana. Jest to technicznie nazywane ukrywaniem zamiast zastępowania, ponieważ metody statycznej nie można zastąpić.
Gdy używane jest ukrywanie, jeśli dostęp do nadrzędnej metody statycznej jest uzyskiwany za pomocą nazwy klasy, zostanie użyta metoda nadrzędna. Jeśli dostęp do przesłoniętej potomnej metody statycznej jest uzyskiwany przy użyciu nazwy obiektu, zostanie użyta przesłonięta metoda potomna. Problem występuje, gdy obiekt potomny jest upcastowany jako rodzic. W takim przypadku wywołanie metody statycznej potomnej upcast będzie korzystało z metody nadrzędnej zamiast oczekiwanej metody podrzędnej. Przy prawdziwym polimorfizmie metoda potomna byłaby aktywowana po upcastu.