Java Made Clear: Skillnaden mellan statiska och slutliga nyckelord

static vs final java, båda är kända åtkomstmodifierare i Java som har olika funktioner (används för olika uppgifter).
  1. static: Nyckelordet static kan tillämpas på instansvariabler och metoder men inte på klasser. När det tillämpas kan variabler och metoder anropas utan hjälp av ett objekt. När en metod eller variabel anropas utan objekt upprätthålls inte inkapslingen. Det vill säga, med statiska variabler och metoder finns ingen inkapsling.
  2. final: Nyckelordet final kan tillämpas på alla konstruktioner – variabler, metoder och klasser. När det tillämpas beter sig final mycket olika med var och en med olika funktioner.

Låt oss utforska static vs final java programmatiskt.

I) Användning av static Keyword

Generellt sett kräver en instansvariabel eller metod ett objekt att anropa med. Men statiska variabler och metoder kräver inget objekt. Observera följande 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 }}

I ovanstående kod är age icke-statisk och kräver ett objekt att anropa med. Observera metoden main(). salary är statisk och kräver inget objekt. På samma sätt med den statiska metoden display(). Den anropas utan behov av ett objekt.

II) Användning av finalnyckelordet

Som tidigare nämnts kan finalnyckelordet användas på tre ställen – variabler, metoder och klasser. När det tillämpas beter det sig olika.

  1. En finalvariabel kan inte tilldelas på nytt.
  2. En finalmetod kan inte överordnas.
  3. En finalklass kan inte ärvas.

Men en sak kan hittas gemensamt bland de tre ovanstående, ”final betyder att något inte kan göras”.

a) final med variabler

En finalvariabel fungerar som en konstant i C/C++. Det vill säga, en finalvariabel kan inte tilldelas på nytt. Java stöder inte nyckelordet const och i stället används nyckelordet 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 }}


Variabeln rupees är inte final och tilldelas därmed ett nytt värde på 600. $rate är final och kan därmed inte omfördelas.

b) final med metoder

Om superklassen inte tillåter att underklassen överordnar, deklarerar den helt enkelt metoden som final. Superklassens slutliga metoder kan inte överordnas av underklassen.

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

I superklassen Manager är doSomeThing() deklarerad som final. Underklassen Worker får inte åsidosätta den. Försök en gång, det ger upphov till ett kompileringsfel. Om superklassen har icke-finala metoder (som inte visas i koden) kan underklassen gärna överrida när det passar den.

c) final med klasser

Programmeraren kanske inte vill att en klass ska ärvas av andra klasser, eftersom han vill möjliggöra åtkomst genom komposition och inte genom arv.

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

I ovanstående kod deklareras Fruit som final och därmed kan Mango inte förlänga den. Hur kan den då använda sig av Fruit-klassens metoder? Helt enkelt genom att skapa ett objekt av Fruit och anropa Fruit-klassens metoder. Detta kallas komposition.
Vad är komposition i Java?

Att skapa ett objekt av en annan klass i vår klass och anropa andra klassers variabler och metoder kallas komposition (kallas has-a-förhållande eftersom en klass ”har ett” objekt av en annan klass). Här tillhör objekt och metod eller variabel samma klass. I arv däremot hör objektet till underklassen och variabeln eller metoden till överklassen.

Se allt om Java-skillnader i 90 ämnen

.

Lämna ett svar

Din e-postadress kommer inte publiceras.