Java gjort klart: Forskellen mellem statiske og endelige nøgleord

static vs final java, begge er kendte adgangsmodifikatorer i Java, der har forskellige funktioner (bruges til forskellige opgaver).
  1. static: static nøgleordet kan anvendes på instansvariabler og metoder, men ikke på klasser. Når det anvendes, kan variabler og metoder kaldes uden hjælp fra et objekt. Når en metode eller variabel kaldes uden objekt, opretholdes indkapslingen ikke. Det vil sige, at med statiske variabler og metoder findes der ikke indkapsling.
  2. final: nøgleordet final kan anvendes på alle konstruktioner – variabler, metoder og klasser. Når final anvendes, opfører final sig meget forskelligt med hver med forskellige funktionaliteter.

Lad os undersøge static vs final java programmatisk.

I) Anvendelse af static nøgleordet

Generelt kræver en instansvariabel eller metode et objekt at kalde med. Men statiske variabler og metoder kræver ikke et objekt. Bemærk følgende kode.

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 ovenstående kode er age ikke-statisk og kræver et objekt at kalde med. Bemærk, main()-metoden. salary er statisk og kræver ikke et objekt. Tilsvarende med statisk display() metode. Den kaldes uden behov for et objekt.

II) Anvendelse af final nøgleordet

Som tidligere nævnt kan final-keywordet anvendes tre steder – variabler, metoder og klasser. Når det anvendes, opfører det sig forskelligt.

  1. En final variabel kan ikke genoverdrages.
  2. En final metode kan ikke overskrives.
  3. En final klasse kan ikke nedarves.

Men én ting kan findes fælles blandt de tre ovenstående, “final betyder, at noget ikke kan gøres”.

a) final med variabler

En final variabel fungerer som en konstant i C/C++. Det vil sige, at en final-variabel ikke kan omfordeles. Java understøtter ikke nøgleordet const og bruger i stedet nøgleordet 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 }}


Variablen rupees er ikke final og dermed reassigneret med en ny værdi på 600. $rate er final og kan dermed ikke omtildeles.

b) final med metoder

Hvis superklassen ikke tillader underklassen at override, erklærer den simpelthen metoden som final. De endelige metoder i superklassen kan ikke overskrives af 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 er doSomeThing() erklæret endelig. Underklassen Worker må ikke overskrives. Prøv en gang, det giver kompileringsfejl. Hvis superklassen har ikke-finale metoder (ikke vist i koden), kan underklassen frit override, når det passer den.

c) final med klasser

Programmøren kan ikke lide, at en klasse kan arves af andre klasser, fordi han gerne vil tillade tilgængelighed gennem komposition og ikke gennem 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 ovenstående kode er Fruit erklæret som final, og dermed kan Mango ikke udvide den. Hvordan kan den så gøre brug af metoder fra frugtklassen? Simpelthen ved at oprette et objekt af Fruit og kalde metoder fra Fruit-klassen. Dette kaldes komposition.
Hvad er komposition i Java?

Det at oprette et objekt af en anden klasse i vores klasse og kalde andre klassers variabler og metoder kaldes komposition (kendt som et has-a-forhold, da en klasse “har et” objekt af en anden klasse). Her tilhører objekt og metode eller variabel den samme klasse. I modsætning hertil hører objektet i arv til underklassen og variablen eller metoden til overklassen.

Se alle for Java Forskelle på 90 emner

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.