Java Made Clear: Diferența dintre cuvintele cheie statice și finale

static vs final java, ambele sunt modificatori de acces cunoscuți în Java care au funcționalități diferite (utilizate pentru diferite sarcini).

  1. static: cuvântul cheie static poate fi aplicat variabilelor de instanță și metodelor, dar nu și claselor. Atunci când este aplicat, variabilele și metodele pot fi apelate fără ajutorul unui obiect. Atunci când o metodă sau o variabilă este apelată fără obiect, încapsularea nu este menținută. Altfel spus, în cazul variabilelor și metodelor statice, încapsularea nu există.
  2. final: Cuvântul cheie final poate fi aplicat la toate construcțiile – variabile, metode și clase. Atunci când este aplicat, final se comportă foarte diferit, fiecare având funcționalități diferite.

Să explorăm programatic java static vs final.

I) Utilizarea cuvântului cheie static

În general, o variabilă de instanță sau o metodă necesită un obiect cu care să fie apelată. Dar variabilele și metodele statice nu necesită un obiect. Observați, codul următor.

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 }}

În codul de mai sus, age este non-statică și necesită un obiect pentru a fi apelată cu. Observați, metoda main(). salariul fiind static nu necesită un obiect. În mod similar cu metoda statică display(). Aceasta este apelată fără a avea nevoie de un obiect.

II) Utilizarea cuvântului cheie final

După cum s-a spus mai devreme, cuvântul cheie final poate fi aplicat în trei locuri – variabile, metode și clase. Atunci când este aplicat se comportă diferit.

  1. O variabilă finală nu poate fi realocată.
  2. O metodă finală nu poate fi suprascrisă.
  3. O clasă finală nu poate fi moștenită.

Dar un lucru poate fi găsit în comun între cele trei de mai sus, „final înseamnă că ceva nu poate fi făcut”.

a) final cu variabile

O variabilă finală funcționează ca o constantă din C/C++. Adică, o variabilă finală nu poate fi realocată. Java nu suportă cuvântul cheie const și în locul acestuia folosește cuvântul cheie 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 }}


Variabila rupees nu este finală și astfel este realocată cu o nouă valoare de 600. $rate este finală și astfel nu poate fi realocată.

b) final cu metode

Dacă superclasa nu permite subclasei să suprascrie, ea declară pur și simplu metoda ca fiind finală. Metodele finale ale superclasei nu pot fi suprascrise de subclasă.

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(); }}

În superclasa Manager, doSomeThing() este declarată finală. Subclasa Worker nu are voie să o suprascrie. Încearcă o dată, se ridică o eroare de compilare. În cazul în care superclasa are metode nefinale (care nu sunt prezentate în cod), subclasa poate să se simtă liberă să le suprascrie după bunul său plac.

c) final cu clase

Programatorul poate să nu dorească ca o clasă să fie moștenită de alte clase, deoarece ar dori să permită accesibilitatea prin compoziție și nu prin moștenire.

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); }} 

În codul de mai sus, Fruit este declarat ca fiind final și astfel Mango nu îl poate extinde. Atunci cum poate utiliza metodele clasei Fruit? Pur și simplu prin crearea unui obiect de tip Fruit și apelarea metodelor clasei Fruit. Acest lucru este cunoscut sub numele de compoziție.
Ce este compoziția în Java?

Crearea unui obiect al altei clase în clasa noastră și apelarea variabilelor și metodelor altei clase este cunoscută sub numele de compoziție (cunoscută sub numele de relație has-a, deoarece o clasă „are un” obiect al altei clase). Aici, obiectul și metoda sau variabila aparțin aceleiași clase. În schimb, în moștenire, în cazul moștenirii, obiectul aparține subclasei, iar variabila sau metoda aparține superclasei.

Vezi tot pentru diferențe Java pe 90 de subiecte

Lasă un răspuns

Adresa ta de email nu va fi publicată.