Ključna riječ final u javi se koristi da ograniči korisnika. Može se koristiti u mnogim kontekstima. Final može biti:
Ključna riječ final može se primijeniti sa varijablama, final varijabla koja nema vrijednosti se naziva blank final varijabla ili neinicijalizovana final varijabla. Ona može biti inicijalizovana samo u konstruktoru. Blank final varijabla takođe može biti statička i biće inicijalizovana samo u statičkom bloku. Razmotrimo neke osnovne stvari o ključnoj riječi final. Napomena: Ključna riječ final
Ako bilo koju varijablu proglasimo za final, ne možemo više mijenjati njenu vrijednost (ona će biti konstanta). Primjer final varijable Ovdje imamo final varijablu speedlimit, pokušaćemo promijeniti njenu vrijednost, ali to neće biti moguće zato što jednom dodijeljena vrijednost final varijabli više ne može biti promijenjena.
class Bike9{ final int speedlimit=90; //final varijabla void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } } //kraj klase Ispis na ekranu: Compile Time Error
Ako se bilo koja metoda proglasi za final, ona se ne može preklopiti. Primjer final metode
class Bike{ final void run(){System.out.println("vozi");} } class Honda extends Bike{ void run(){System.out.println("vozi sigurno 100km/h");} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } } Ispis na ekranu: Compile Time Error
Ako bilo koju klasu proglasimo za final, ona se ne može naslijediti. Primjer final klase
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println("vozi sigurno 100km/h");} public static void main(String args[]){ Honda1 honda= new Honda(); honda.run(); } } Ispis na ekranu: Compile Time Error
Da li se final metoda može naslijediti? Da, final metoda se može naslijediti ali se ne može preklopiti. Napr.:
class Bike{ final void run(){System.out.println("vozi...");} } class Honda2 extends Bike{ public static void main(String args[]){ new Honda2().run(); } } Ispis na ekranu: vozi...
Šta je blank ili neinicijalizovana final varijabla? Final varijabla koja nije inicijalizovana u vrijeme deklarisanja je poznata kao blank final varijabla. Ako želimo da kreiramo varijablu koja se inicijalizuje u vrijeme kreiranja objekta i pošto je jednom inicijalizovana više se ne može mijenjati, ovo je koristan način. Napr. PAN CARD broj zaposlenika. Može se inicijalizovati samo u konstruktoru. Primjer blank final varijable
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }
Može li se inicijalizovati blank final varijabla? Da, ali samo u konstruktoru. Napr.:
class Bike10{ final int speedlimit; //blank final varijabla Bike10(){ speedlimit=70; System.out.println(speedlimit); } public static void main(String args[]){ new Bike10(); } } Ispis na ekranu: 70
Statička blank final varijabla Statička final varijabla koja nije inicijalizovana u vrijeme deklarisanja je poznata kao statička blank final varijabla. Ona se može inicijalizovati samo u statičkom bloku. Primjer statičke blank final varijable
class A{ static final int data; //statička blank final varijabla static{ data=50;} public static void main(String args[]){ System.out.println(A.data); } }
Šta je final parametar? Ako deklarišemo bilo koji parametar kao final, ne možemo mijenjati njegovu vrijednost.
class Bike11{ int cube(final int n){ n=n+2; //ne može se mijenjati pošto je n final n*n*n; } public static void main(String args[]){ Bike11 b=new Bike11(); b.cube(5); } } Ispis na ekranu: Compile Time Error
Da li se konstruktor može deklarisati kao final? Ne, pošto se konstruktor nikad ne nasljeđuje.
Zadaci iz ovog poglavlja Objektno orijentisano programiranje u Javi Index