14. Ključna riječ final

Ključna riječ final u javi se koristi da ograniči korisnika. Može se koristiti u mnogim kontekstima. Final može biti:

  1. varijabla
  2. metoda
  3. klasa

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

Final varijabla

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

Final metoda

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

Final klasa

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