static vs final java, oba są znanymi modyfikatorami dostępu w Javie wykonującymi różne funkcje (używane do różnych zadań).
- static: słowo kluczowe static może być stosowane do zmiennych instancji i metod, ale nie do klas. Po zastosowaniu, zmienne i metody mogą być wywoływane bez pomocy obiektu. Kiedy metoda lub zmienna jest wywoływana bez obiektu, enkapsulacja nie jest zachowana. Czyli w przypadku zmiennych statycznych i metod enkapsulacja nie istnieje.
- final: słowo kluczowe final może być zastosowane do wszystkich konstruktów – zmiennych, metod i klas. Po zastosowaniu, final zachowuje się bardzo różnie z każdym z nich z różnymi funkcjonalnościami.
Poznajmy static vs final java programowo.
I) Użycie słowa kluczowego static
Generalnie, zmienna instancji lub metoda wymaga obiektu do wywołania. Ale statyczne zmienne i metody nie wymagają obiektu. Zwróć uwagę na następujący kod.
public class Employee{ int age = 45; // non-static variable static double salary = 8877.66; // static variable public static void display() // static method { System.out.println("Hello World"); } public static void main(String args) { // System.out.println(age); // raises error, it is non-static and requires object System.out.println(salary); // works fine as salary is static, object not required display(); // works fine as display() is static, object not required }}
W powyższym kodzie wiek jest niestatyczny i wymaga obiektu do wywołania. Zauważ, że metoda main(). pensja jest statyczna i nie wymaga obiektu. Podobnie jest z metodą statyczną display(). Jest ona wywoływana bez konieczności posiadania obiektu.
II) Użycie słowa kluczowego final
Jak stwierdzono wcześniej, słowo kluczowe final może być zastosowane w trzech miejscach – zmiennych, metodach i klasach. Po zastosowaniu zachowuje się ono różnie.
- Zmienna finalna nie może być ponownie przypisana.
- Metoda finalna nie może być nadpisana.
- Klasa finalna nie może być dziedziczona.
Ale jedną rzecz można znaleźć wspólną wśród powyższych trzech, „final oznacza, że coś nie może być zrobione”.
a) final ze zmiennymi
Zmienna final działa jak stała C/C++. To znaczy, zmienna finalna nie może być ponownie przypisana. Java nie obsługuje słowa kluczowego const, a na jego miejsce używa słowa kluczowego final.
public class Bank{ public static void main(String args) { int rupees = 500; // non-final can be reassigned System.out.println("rupees before reassigned: " + rupees); rupees = 600; // non-final System.out.println("rupees after reassigned: " + rupees); final double $rate = 61.5; // final cannot be reassigned System.out.println("$ Rate is Rs." + $rate); // $rate = 62.8; // raises error }}
Zmienna rupia nie jest ostateczna i tym samym nie może być ponownie przypisana z nową wartością 600. $rate jest ostateczna i tym samym nie może być ponownie przypisana.
b) final with methods
Jeśli superklasa nie pozwala podklasie na nadpisanie, po prostu deklaruje metodę jako ostateczną. Metody finalne superklasy nie mogą być nadpisane przez podklasę.
class Manager{ public final void doSomeThing() // observe final { System.out.println("Do it right now"); }}public class Worker extends Manager{ public static void main(String args) { Worker w1 = new Worker(); w1.doSomeThing(); }}
W superklasie Manager, metoda doSomeThing() jest zadeklarowana jako finalna. Podklasa Worker nie może jej nadpisać. Spróbuj raz, to podnosi błąd kompilacji. Jeśli super klasa ma nieostateczne metody (nie pokazane w kodzie), podklasa może swobodnie nadpisać je według własnego uznania.
c) final with classes
Programista może nie chcieć, aby klasa była dziedziczona przez inne klasy, ponieważ chciałby umożliwić dostępność poprzez kompozycję, a nie poprzez dziedziczenie.
final class Fruit // observe, final class{ String nature = "Seedless";}public class Mango // extends Fruit raises compilation error{ public static void main(String args) { Fruit f1 = new Fruit(); System.out.println("Fruit type is " + f1.nature); }}
W powyższym kodzie, Fruit jest zadeklarowany jako finalny i tym samym Mango nie może go rozszerzyć. W takim razie jak może skorzystać z metod klasy Fruit? Po prostu tworząc obiekt klasy Fruit i wywołując metody klasy Fruit. Jest to znane jako kompozycja.
Co to jest kompozycja w Javie?
Tworzenie obiektu innej klasy w naszej klasie i wywoływanie zmiennych i metod innej klasy jest znane jako kompozycja (znane jako relacja has-a jako jedna klasa „ma” obiekt innej klasy). W tym przypadku obiekt i metoda lub zmienna należą do tej samej klasy. W przeciwieństwie do tego, w dziedziczeniu obiekt należy do podklasy, a zmienna lub metoda należy do nadklasy.
View All for Java Differences on 90 Topics
.