Java tehty selväksi: Staattisten ja lopullisten avainsanojen ero

static vs. final java, molemmat ovat tunnettuja pääsyn muokkaajia Javassa, jotka tekevät eri toiminnallisuuksia (käytetään eri tehtäviin).
  1. static: static-avainsanaa voidaan käyttää instanssimuuttujiin ja metodeihin, mutta ei luokkiin. Kun sitä käytetään, muuttujia ja metodeja voidaan kutsua ilman objektin apua. Kun metodia tai muuttujaa kutsutaan ilman objektia, kapselointi ei säily. Toisin sanoen staattisilla muuttujilla ja metodeilla kapselointia ei ole.
  2. final: final-avainsanaa voidaan soveltaa kaikkiin konstruktioihin – muuttujiin, metodeihin ja luokkiin. Kun sitä käytetään, final käyttäytyy hyvin eri tavalla jokaisella on erilaiset toiminnallisuudet.

Tutkitaanpa staattinen vs. final java ohjelmallisesti.

I) Staattisen avainsanan käyttö

Yleensä instanssimuuttuja tai metodi vaatii objektin, jolla sitä kutsutaan. Mutta staattiset muuttujat ja metodit eivät vaadi objektia. Tarkkaile seuraavaa koodia.

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

Yllä olevassa koodissa age ei ole staattinen ja vaatii objektin, jolla sitä kutsutaan. Huomaa, main()-metodi. palkka on staattinen eikä vaadi objektia. Samoin staattinen display()-metodi. Sitä kutsutaan ilman objektia.

II) Final-avainsanan käyttö

Kuten aiemmin todettiin, final-avainsanaa voidaan käyttää kolmessa paikassa – muuttujissa, metodeissa ja luokissa. Kun sitä käytetään, se käyttäytyy eri tavoin.

  1. Final-muuttujaa ei voi siirtää uudelleen.
  2. Final-metodia ei voi ohittaa.
  3. Final-luokkaa ei voi periä.

Mutta yksi asia löytyy yhteisenä edellä mainituista kolmesta, ”final tarkoittaa, että jotain ei voi tehdä”.

a) final muuttujien kanssa

Final-muuttuja toimii kuten C/C++:n vakio. Toisin sanoen final-muuttujaa ei voi siirtää uudelleen. Java ei tue const-avainsanaa ja sen tilalla käytetään final-avainsanaa.

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


Muuttuja rupia ei ole lopullinen ja siten uudelleensijoitettu uudella arvolla 600. Muuttuja $rate on final ja sitä ei siten voi siirtää uudelleen.

b) final metodeilla

Jos yläluokka ei salli alaluokalle overridea, se yksinkertaisesti julistaa metodin finaliksi. Aliluokka ei voi ohittaa superluokan finaalisia metodeja.

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

Superluokassa Manager, doSomeThing() on ilmoitettu finaaliseksi. Aliluokka Worker ei saa ohittaa. Kokeile kerran, se herättää käännösvirheen. Jos yläluokalla on ei-finaalisia metodeja (ei näy koodissa), aliluokka voi vapaasti ylikirjoittaa ne haluamallaan tavalla.

c) final luokkien kanssa

Organisoija ei ehkä halua, että luokka periytyy toisilta luokilta, koska hän haluaa sallia saavutettavuuden koostumuksen kautta eikä periytymisen kautta.

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

Yllä olevassa koodissa Fruit on ilmoitettu final-luokaksi ja siten Mango ei voi laajentaa sitä. Miten se voi sitten käyttää Fruit-luokan metodeja? Yksinkertaisesti luomalla Fruit-olion ja kutsumalla Fruit-luokan metodeja. Tämä tunnetaan nimellä kompositio.
Mitä on kompositio Javassa?

Toisen luokan objektin luominen omassa luokassamme ja toisen luokan muuttujien ja metodien kutsuminen tunnetaan nimellä kompositio (tunnetaan nimellä has-a-suhde, koska yhdellä luokalla ”on” toisen luokan objekti). Tässä objekti ja metodi tai muuttuja kuuluvat samaan luokkaan. Sitä vastoin periytymisessä objekti kuuluu alaluokkaan ja muuttuja tai metodi kuuluu yläluokkaan.

Katso kaikki Java-erot 90 aiheeseen

Vastaa

Sähköpostiosoitettasi ei julkaista.